python中…(globals())[method](param1,param2)
与…相同exec('method(param1,param2)')
在我的理解中,这两个方法的结果是相同的方法调用。我看不出哪一种技术比另一种有什么特别的好处?这两种方法有什么潜在的缺陷吗?解释器设计或最佳实践是否推荐其中一个?
(globals())[method](param1,param2)
从字典globals()
中访问键method
(一次查找),并将返回值作为可调用对象执行,传递参数param1
和param2
。
exec('method(param1,param2)')
在底层做了更多的工作,因为它需要将字符串解析为抽象语法树,访问字典globals()
中的method
,param1
和param2
(三次查找),并将method
作为可调用对象执行,将param1
和param2
传递给它。