首页 > 解决方案 > 在 python (globals())[method](param1,param2) 中与 exec('method(param1,param2)?

问题描述

在蟒蛇... (globals())[method](param1,param2)

一样... exec('method(param1,param2)')

从我的理解结果来看,这两种方法都是对方法的相同调用。我看不出一种技术与另一种技术相比有什么具体的好处?任何一个隐藏的陷阱都会暗示一个比另一个?解释器设计或最佳实践是否建议其中之一?

标签: python-3.x

解决方案


片段

(globals())[method](param1,param2)

method从字典中访问一个键globals()(一次查找)并将返回的值作为可调用的值传递给它,并将参数param1param2.

片段

exec('method(param1,param2)')

在幕后做更多的事情,因为它需要将字符串解析为抽象语法树method、访问param1param2字典中globals()(三个查找)并执行method作为可调用传递param1和传递param2给它。


推荐阅读