简单的Python函数调用和在cProfile.run()中包装它之间的区别

时间:2010-08-11 09:45:33

标签: python profiler python-2.6

我有一个相当简单的Python脚本,它包含一个像

这样的函数调用

f(var, other_var)

即。一个获取几个参数的函数。所有这些参数都可以在f中访问并具有值。

当我改为呼叫时

cProfile.run('f(var, other_var)')

它失败并显示错误消息:

NameError: "name 'var' is not defined"

Python版本

Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

这里发生了什么?

1 个答案:

答案 0 :(得分:9)

这是因为cProfile尝试exec将您作为字符串传递给它的代码,并且失败了,因为,var未在该段代码中定义!它使用run()调用范围内的变量,但由于你没有告诉cProfile它们不知道使用它们。请改用runctx,因为它允许您传入locals和globals字典以用于exec ed代码:

cProfile.runctx( "...", globals(), locals() )