您可以定义动态包装:
def fun(a, b, c, d): # raw function
print(a + b + c - d)
def closed(d): fun(5,6,7,d)
closed(10)
你可以用这个
lambda
,但@juanpa指出,如果没有理由的话,你不应该这样做。以上代码将得到8。顺便说一下,这个方法不是特定于Python的,大多数语言都支持这个方法。
您需要一个闭包,它依赖于包装器变量,而不是不依赖,并且有充分的理由不这样做。这将在本质上创建一个依赖于包装的非工作函数。在这种情况下,使用类可能更好:
class fun:
def __init__(self,*args): #Can use specific things, not just *args.
self.args = args #Or meaningful names
def __call__(self,a, b, c, d): # raw function
print(a + b + c - d,self.args)
def closed(d):
fun("some",3,"more",['args'])(5,6,7,d)
closed(10)
或使用
*args/**kwargs