此示例取自 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 指的是一个新功能对象,你可以用*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