在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中可能有的任何其他好处?
答案 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的值。即便如此,最好还是要明确。