有一个函数接受可选参数。
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")。
我怎样才能简洁地(但可读地)做出这种区分?
一种可能性通常是在 内检查 Nonealpha,这是鼓励的,因为这将使代码更安全。但是假设它alpha用于其他实际应该处理的地方None。
我想在调用方处理。
一种可能性是区分大小写:
if myp2 is None:
alpha("FOO")
else:
alpha("FOO", myp2)
但是当有多个这样的参数时,这很快就会变成很多代码。(指数,2^n)
另一种可能性是简单地做alpha("FOO", myp2 or "bar"),但这需要我们知道默认值。通常,我可能会采用这种方法,但我以后可能会更改默认值,alpha然后需要手动更新此调用,以便仍然使用(新)默认值调用它。
我使用的是 python 3.4,但最好是你的答案能提供一种适用于任何 python 版本的好方法。
这个问题在技术上已经在这里完成,但我再次改写了一些要求,因为第一个答案确实掩盖了这一点:
我希望一般保留alpha其默认值的行为"foo", "bar",所以它(可能)不是改变alpha自身的选项。
再换句话说,假设在其他alpha地方使用它作为alpha("FOO", None)输出FOO,None预期行为的地方。