该profiler
函数在每个分析事件中都会被调用,因为您调用sys.setprofile
了它。
每次调用它时,它都会打印一行,因为您将无条件print
语句作为其主体。 为什么你这样做,我们很难告诉你,让你的“为什么”问题真的,真的很奇怪。
根据文档,分析事件只是调用和返回:
'call'
调用了一个函数(或输入了一些其他代码块)。
'return'
一个函数(或其他代码块)即将返回。
'c_call'
AC 函数即将被调用。这可能是扩展功能或内置功能。
'c_return'
AC 功能已返回。
这是我在稍微简单、更清晰的情况下观察到的(Python 2.5 或 2.6,MacOSX):
>>> def a():
... print 'aaa'
...
>>> def profiler(frame, event, arg):
... print 'PROF %r %r' % (event, arg)
...
>>> sys.setprofile(profiler)
PROF 'return' None
>>> a()
PROF 'call' None
PROF 'c_call' <built-in function utf_8_decode>
PROF 'c_return' <built-in function utf_8_decode>
PROF 'return' (u'a()\n', 4)
PROF 'call' None
PROF 'call' None
aaa
PROF 'return' None
PROF 'return' None
不知道为什么你没有看到你应该看到的c_call
情况c_return
——也许在你的特定平台上没有隐式utf-8
的打印转换(什么操作系统?什么级别的 Python?如果有的话是什么 IDE)。