このprofiler
関数は、呼び出したので、プロファイリング イベントごとに呼び出さsys.setprofile
れます。
呼び出されるたびに、無条件のprint
ステートメントを本体として配置するため、行が出力されます。 なぜそれをしたのか、私たちがあなたに伝えるのは難しいので、あなたの「なぜ」の質問は本当に、本当に独特です.
docsによると、プロファイリング イベントは単なる呼び出しと戻りです。
'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
andのケースが表示されない理由がわかりません。おそらく、特定のプラットフォーム (どの OS? どのレベルの Python? どの IDE があればどの IDE) で印刷するためc_return
の暗黙的な変換がないのでしょう。utf-8