有一个函数带有可选参数。
def alpha(p1="foo", p2="bar"):
print('{0},{1}'.format(p1, p2))
让我重复一下当我们以不同的方式使用这个函数时会发生什么:
>>> alpha()
foo,bar
>>> alpha("FOO")
FOO,bar
>>> alpha(p2="BAR")
foo,BAR
>>> alpha(p1="FOO", p2=None)
FOO,None
现在考虑这样的情况,我想调用它,比如 alpha("FOO", myp2)和 myp2将包含一个要传递的值,或者是 None。但是,即使该函数处理 p2=None,我希望它使用其默认值 "bar"代替。
也许措辞有点混乱,所以让我重申一遍:
如果
myp2 is None,调用alpha("FOO")。否则,调用alpha("FOO", myp2)。
这种区别是相关的,因为 alpha("FOO", None)的结果与 alpha("FOO")不同。
我怎样才能简洁(但可读)地做出这种区分呢
一种可能性通常是对 检查 alpha内无,这将是鼓励的,因为这将使代码更安全。但是假设 alpha在其他地方使用,在那里它实际上应该像它那样处理 None。
我想在呼叫端处理这个问题。
一种可能性是进行案例区分:
if myp2 is None:
alpha("FOO")
else:
alpha("FOO", myp2)
但是当有多个这样的参数时,它可以很快变成很多代码
另一种可能性是简单地做 alpha("FOO", myp2 or "bar"),但 要求我们知道默认值。通常,我可能会使用这种方法,但是稍后我可能会更改 alpha的默认值,然后需要手动更新这个调用,以便仍然使用(新的)默认值调用它。
我使用的是 python 3.4,但是如果您的答案能够提供一个在任何 python 版本中都能正常工作的好方法,那就再好不过了。
这个问题在技术上已经完成了,但是我再次重述了一些要求,因为第一个答案掩盖了这一点:
我希望通常保留 alpha的默认值 "foo", "bar"的行为,因此(可能)不能选择更改 alpha本身。
换句话说,假设 alpha在其他地方作为 alpha("FOO", None)使用,其中输出 FOO,None是预期的行为。