我有这样的功能:
def func(foo, bar, nin=None, nout=None):
if not nin:
nin = bar
if not nout:
nout = bar
return foo * nin / nout
它接受两个可选参数,如果它们没有被传入,我需要将它们映射到另一个强制参数。但这是pythonic方法吗?是否有其他方法可以检查并设置nin
和nout
?
答案 0 :(得分:2)
我会做以下事情:
def func(foo, bar, nin=None, nout=None):
nin = bar if nin is None else nin
nout = bar if nout is None else nout
return foo * nin / nout
答案 1 :(得分:2)
如果你真的想缩短它,你可以这样做:
nin = bar if nin is None else nin
请注意,我在这里使用None
通过身份测试is
,而不是真实性;否则,如果发生nin = 0
?这不是None
,但仍会评估false-y(请参阅truth value testing),因此style guide建议:
应始终使用
None
与is
等单身人士进行比较 或者is not
...当你真正的意思时要小心写if x
if x is not None
- 例如在测试变量或参数时是否 默认为None
设置为其他值。另一个值可能 有一个类型(如容器)在布尔值中可能是假的 上下文!
答案 2 :(得分:1)
None
是您接受零等的输入方式。
我认为您应该使用nin is None
而不是nin == None
,而且许多人会认为nin = bar if nin is None else nin
更加py,但我个人认为两者都可以。