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