如果没有,则将可选参数映射到强制参数的Pythonic方法

时间:2015-08-02 18:22:55

标签: python function parameters

我有这样的功能:

def func(foo, bar, nin=None, nout=None):
    if not nin:
        nin = bar
    if not nout:
        nout = bar
    return foo * nin / nout

它接受两个可选参数,如果它们没有被传入,我需要将它们映射到另一个强制参数。但这是pythonic方法吗?是否有其他方法可以检查并设置ninnout

3 个答案:

答案 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建议:

  

应始终使用Noneis等单身人士进行比较   或者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,但我个人认为两者都可以。