この例は、Beazley、Python Essential Reference 4e、pg:101から抜粋したものです。
彼はどうしていますか:
func(*args, **kwargs)
ここで、「func」は1つの引数を取る平方関数です。この章の前半で、彼は、呼び出し/定義で引数の位置と数がどのように一致する必要があるかについて説明します。一致しないと、TypeErrorが発生します。
また、
@trace
def square(x):
...
square = trace(square)
traceは'callf'を返すので、これは次のように書くのと同じです。square = callfこれは、squareがnew-function-objectを参照するため、。で呼び出すことができるため、問題ありません*args, **kwargs
。しかし、その後、callf
彼はしますfunc(*args...
'square'が他のオブジェクトを参照するようにしたとすると、元の正方形に内部でアクセスするにはどうすればよいですか?どのようなメカニズムが機能し始めていますか?
@trace
def square(x):
return x*x
enable_tracing = True
if enable_tracing:
debug_log = open("debug.log","w")
def trace(func):
if enable_tracing:
def callf(*args,**kwargs):
debug_log.write("Calling %s: %s, %s\n" %
(func.__name__, args, kwargs))
r = func(*args,**kwargs) #????????
debug_log.write("%s returned %s\n" % (func.__name, r))
return r
return callf
else:
return func