Python関数のコードオブジェクトは__code__
です。コードオブジェクトのPython関数の取得
sys.settrace
トレースframe
は、f_code
コードオブジェクトを持っています。
トレーサを関数として呼び出す場合、関数オブジェクト(およびその__annotation__
メンバ)を取得するにはどうすればよいですか?
これまでのところ、試行錯誤によって、私が持っている:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
これはではなく、クラスのメンバ関数のために、機能のために働くようです。悪いことに、クラスメンバ関数を同じ名前の最上位関数と混同します。
(。私は、Python 3.2.3(Xubuntuの)に私は、Python 3.3 inspect
モジュールがsignature
機能を持っていることを確認しています。これは、コードオブジェクトのための注釈を返しますか、それはあまりにも関数オブジェクトを必要としない?)
'inspect.getframeinfo'タプルの' function'フィールドで
__code__
を置き換える必要はPython 2いずれかの文字列ではなく、関数オブジェクトのようです - これは、Python 3用です。そして、gcアプローチは複数のリファラーを危険にさらしますか? – Willgc.get_referrers(...)を使用して終了しました[0] – Will
func_code/__ code__がリスト内包にしたいコードオブジェクトであるかどうかをチェックすることができます。同じコードオブジェクトと異なるクロージャデコレータで。私はf_localsとfunc_closureのcell_contentsをそれぞれ比較することができます。 –