有人能想出一个使用 exec 的良好实践示例吗?
如果总有一种更高效、更安全的方式来替换 exec,为什么 python 不弃用 exec?
正如其他 问题中所解释的那样,eval
/exec
被认为是不好的做法,因为它们通常被滥用来执行不需要的任务,从而导致潜在的安全问题和通常的不良编程。
然而,这些机制有一些有效的用途,它们公开了其他地方没有的重要功能——在运行时执行任意代码。
例如,想象一下,您想编写一个可以自我更新的应用程序。您可以从远程 URL 获取脚本,该脚本与exec
您的应用程序一起运行并将其更新到最新版本。虽然这样做本身会带来很大的安全隐患,但通过使用数字签名使过程安全并不难。
code
您可以在模块 源代码中找到另一个常见用途:在运行时执行用户输入的代码以进行调试。
不,从任何角度来看,eval
相关工具并不总是不好的。
有许多事情只有在它们表示为具有常规、位置或关键字参数(不是魔术或args)的常规函数时才能正常工作。除了.*args
**keywords
eval
有关如何使用它的一个很好的例子,请检查collections.namedtuple
. 尽管可以在没有 的情况下创建这样的类工厂eval
,但是它定义的所有函数,__new__
特别_replace
是,将有无用的帮助文本,并且没有它将是一个不太方便的工具。更糟糕的是,非 eval 实现几乎肯定会是SLOWER。
另一个关于这种精确使用的更全面的例子eval
是fine decorator
library,它将这种做法推广到一组工具中,这些工具允许您动态地创建具有特定函数签名的函数;它在eval
内部使用。