【发布时间】:2014-09-09 15:54:48
【问题描述】:
有没有办法在不隐藏原始调用提供或不提供可选参数的情况下转发函数参数?
def func1(a=x):
# do stuff
def func2(b=y):
# pass args to func1 without masking func1 defaults
return func1(?)
对 func2() 的调用应该导致调用 func1() 时不带参数或至少使用其默认参数,无论它们可能是什么。
以下几乎可以工作,但基本上我不知道 func2 是否有办法确定它的默认值是否被调用。
def func2(b=y):
# this comes close but what if func2(y) is called?
if b == y:
return func1()
else:
return func1(b)
【问题讨论】:
-
如果默认值为
1,调用函数传入1或不理会有什么区别? -
func2 需要在 func1 更新时更新。如果函数是由不同的作者编写的,这可能会出现问题。
-
为什么?如果我使用
frobble = func2(a=9),为什么我会关心func1()的默认参数将值从9更改为11? -
也许我误解了你的第一条评论。有时 func2 需要调用 func1(),不知道 func1 的默认值,而 func2 的默认值可能没有意义,所以两个默认值都起作用。
-
您的具体用例是什么?
func2应该足够聪明,只将适当的参数传递给func1,并且应该依赖于任何参数的默认值。