【发布时间】:2018-10-18 13:03:22
【问题描述】:
我有以下简单的示例代码:
def wrapper(foo, para1=1, *args):
print("para1: "+ str(para1))
print(foo(*args))
def foo1(x):
return 2*x
wrapper(foo1, 2, 3)
我定义了一个函数wrapper,它有一个参数para1,默认值1。
但是为了正确调用带有函数foo1 的包装器,我必须一直设置para1,因为我必须将额外的参数传递给foo1。这意味着默认值para1=1 没有任何意义,因为无论如何我必须一直定义它。
或者有没有其他方法来定义函数,这样我就可以轻松使用这个默认值,而不必一直定义它?
例如,
wrapper(foo1, *args=(3,))
wrapper(foo=foo1, args=(3,))
不工作...
用例示例:
def wrapper(foo, timeout=10, *args):
time0 = time.time()
while time0 < time.time() + timeout:
if foo(*args):
return True
time.sleep(1)
raise SomeTimeout Exception
【问题讨论】:
-
你不能把
para1放在wrapperargs的末尾吗? -
不,然后我得到一个语法错误
-
@Jean-FrançoisFabre 然后像
wrapper(foo1, 2, 3)这样的调用会中断 -
def wrapper(foo, *args, para1=1)又出了什么问题?