python或vs explicit if for value assignment

时间:2017-10-03 06:08:51

标签: python

在python中浏览一些代码库时,我看到一些表达式大致转换为下面的代码:

def foo(a=None):
    b = a or {'key1': 'val1', 
           'key2': 'val2',
           'key3': 'val3'
         }

以上也可以写成:

def foo(a=None):
    if a is None :
    b = {
          'key1': 'val1', 
          'key2': 'val2',
          'key3': 'val3'
         }

    # now  we can use b here

考虑or vs if评估,是否只是编码风格或我们在python中可能有的任何其他好处?

1 个答案:

答案 0 :(得分:4)

两者之间存在差异。

b = a or {}语法会将{}分配给b如果a是任何“假”'}价值(即0''False,...)。

使用以下方式执行明确检查:

if a is None:
    b = {}
else:
    b = a
仅当{}b时,

才会将a分配给None。任何其他“假”' a的值将确保使用else分支。

修改

看过你的更新问题后,似乎在函数def中分配了a=None。这是一种非常常见的做法,可以避免为函数参数设置可变的默认值。请参阅here,了解为何完成此操作。

在此设置中分配默认参数的标准方法是:

def my_func(x=None):
    if x is None:
        x = [1,2,3,4] #The default, mutable structure that you want to assign to x.

我会避免使用x = x or [...]获取快捷方式,除非您绝对确定用户不应传入将评估为false的值。即便如此,最好还是要明确。