私のプロジェクトでは、私の機能(電話番号ecc eccなど)で達成されたいくつかの操作をトレースします これはどのソリューションが最適ですか?Pythonでは、トレース操作がどのように機能するのですか?
ありがとうございます。
私のプロジェクトでは、私の機能(電話番号ecc eccなど)で達成されたいくつかの操作をトレースします これはどのソリューションが最適ですか?Pythonでは、トレース操作がどのように機能するのですか?
ありがとうございます。
最善のアプローチはデコレータを使用しています。 次 定義し、装飾された機能に行われたコールの数をカウントし、各コールのトレース・メッセージを表示する関数デコレータを適用します。各機能は、このクラスで飾ら方法
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)
チェックすると
最善の解決策は、Pythonの魔法を使用することです
Pythonに組み込まれているトレース機能を使用できます。たとえば、次のように彼らが呼び出されたすべての機能の概要が表示されます
python -m trace -l paths.py
この
と呼ばれているとして、これはすべての機能が一覧表示されますpython -m trace -t your_program.py
ここ
私はあなたが明確にする必要があると思う。これは現状のままではかなり曖昧です。 – Carcigenicate