2017-03-03 6 views

答えて

1

最善のアプローチはデコレータを使用しています。 次 定義し、装飾された機能に行われたコールの数をカウントし、各コールのトレース・メッセージを表示する関数デコレータを適用します。各機能は、このクラスで飾ら方法

class tracer: 
def __init__(self, func): # On @ decoration: save original func 
    self.calls = 0 
    self.func = func 
def __call__(self, *args): # On later calls: run original func 
    self.calls += 1 
    print('call %s to %s' % (self.calls, self.func.__name__)) 
    self.func(*args) 



@tracer 
def spam(a, b, c): # spam = tracer(spam) 
print(a + b + c) # Wraps spam in a decorator object 

通知は、新しいインスタンスを作成します。独自の関数オブジェクトを保存して呼び出しカウンタを使用します。また、渡された引数を任意にパックして展開するために、* args引数の構文がどのように使用されているかを観察してください。この一般性によって、このデコレータを使用して任意の数の位置引数を持つ関数をラップすることができます。このバージョンはキーワード引数やクラスレベルのメソッドではまだ動作しませんが、結果は返されませんが一般的な概念では機能します。あなたは、関数の実行時間をカウントしたい場合、あなたはこのような装飾を定義することができ、デコレータ、例えば:結果は2である

# This is in Python 3 
ex_time = 0 
def dec(func): 
    def wrapper(*args, **kwargs): 
     global ex_time 
     ex_time += 1 
     return func(*args, **kwargs) 
    return wrapper 

@dec 
def your_func(a): 
    # Define your function here 
    print(a) # For example 

# Let's test 
your_func('hello') 
your_func('world') 
print(ex_time)  

チェックすると

0

最善の解決策は、Pythonの魔法を使用することです

1

Pythonに組み込まれているトレース機能を使用できます。たとえば、次のように彼らが呼び出されたすべての機能の概要が表示されます

python -m trace -l paths.py 

この

と呼ばれているとして、これはすべての機能が一覧表示されます

python -m trace -t your_program.py 

ここ

より多くの情報: https://docs.python.org/2/library/trace.html

関連する問題