私は自分がコーディングした Python 関数のパフォーマンスを測定できるのが好きなので、これに似たことを頻繁に行います...
import time
def some_function(arg1, arg2, ..., argN, verbose = True) :
t = time.clock() # works best in Windows
# t = time.time() # apparently works better in Linux
# Function code goes here
t = time.clock() - t
if verbose :
print "some_function executed in",t,"sec."
return return_val
はい、timeit を使用してパフォーマンスを測定することになっていることは承知していますが、これは私のニーズには問題なく機能し、デバッグのためにこの情報のオンとオフを非常にスムーズに切り替えることができます。
もちろん、そのコードは私が関数デコレーターについて知る前からのものでした...私は今それらについてあまり知りませんが、 **kwds 辞書を使用して、次のことを行うデコレーターを書くことができると思います:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, verbose = True) # Times function
それにもかかわらず、関数の以前の作業を複製して、作業が次のようになるようにしたいと思います。
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, False) # Does not time function
some_function(arg1, arg2, ..., argN, True) # Times function
これには、デコレータが引数の数を数え、元の関数がいくつ取るかを知り、余分なものを取り除き、それらの正しい数を関数に渡す必要があると思います... Pythonに伝える方法はわかりませんこれを行うには...それは可能ですか?同じことを達成するより良い方法はありますか?