2009-04-15 18 views
3

EDIT:この質問はapphackerとConcernedOfTunbridgeWellsの助けを借りて解決されました。私が使用するソリューションを反映するようにコードを更新しました。実行コンテキストの取得/印刷

私は現在、漫画インテリジェンスシミュレータを作成しており、ユーザがアルゴリズムを簡単にデバッグする方法を探しています。他の出力の中でも、アルゴリズムの各ステップの開始時にユーザーに実行コンテキストのプリントアウトを与えることが有益であると感じています。

次のコードは、私が必要としていたものです。

import inspect 

def print_current_execution_context(): 
    frame=inspect.currentframe().f_back #get caller frame 
    print frame.f_locals #print locals of caller 

class TheClass(object): 
    def __init__(self,val): 
     self.val=val 
    def thefunction(self,a,b): 
     c=a+b 
     print_current_execution_context() 


C=TheClass(2) 
C.thefunction(1,2) 

これはの予想出力できます:

{'a': 1, 'c': 3, 'b': 2, 'self': <__main__.TheClass object at 0xb7d2214c>} 

をapphackerし、この答えに向けて

+0

タグは正式にサポートされているため、タイトルにタグを付ける必要はありません。タイトルの中の[Python]の注意があなたの質問にもたらすかもしれないので、あなたが実際に 'python'をタグとして使うと、私は大きな黄色の背景を測定しません。 –

+0

「解決済み」と言う質問を編集しないでください。解決した回答を受け入れてください。またはあなた自身の答えを投稿してください。 –

+0

将来私は、編集は単に#を置き換えますか?その機能を実現した2行では、それほど大きな変化はありませんでした。 –

答えて

1

試しに私を指摘ConcernedOfTunbridgeWellsするありがとう:あなたが使用することができます

class TheClass(object): 
    def __init__(self,val): 
     self.val=val 
    def thefunction(self,a,b): 
     c=a+b 
     print locals() 


C=TheClass(2) 
C.thefunction(1,2) 
+0

これはうまくありがとうございます。これを別の関数に埋め込む方法はありますか?各反復の最後には他のアクションがあり、単一の関数内でそれらをグループ化するとよいでしょう。 私はlocals()を関数に渡すことができることを認識していますが、これは最適ではありません。 –

+0

locals()を関数に渡すことが最適ではない場合、閉包と、各反復時にlocalsへの呼び出しの値で更新する範囲内の上位の辞書を使用することができます。 –

1

__locals__ローカル実行コンテキストを取得します。関連するかもしれない議論については、this stackoverflow postingを参照してください。

+0

ありがとう、リンクされたスレッドは、私が達成したいと思っていたものと非常によく似ています。私はスタックフレームから '__locals__'をつかんで調べて、結果を報告するために私の質問を編集します。ありがとう、マイク –