有没有在Python以下两个语句之间的任何差别(性能或其他方式)?
v = my_dict.get(key, some_default)
VS
v = my_dict.get(key) or some_default
有一个巨大的区别,如果你的价值是false-y:
>>> d = {'foo': 0}
>>> d.get('foo', 'bar')
0
>>> d.get('foo') or 'bar'
'bar'
你不应该使用or default
如果你的值可以是假的-Y。
最重要的是,使用or
增加了额外的字节码;测试和跳转必须执行。只要使用dict.get()
,没有任何优势,使用or default
这里。
还有一个区别:如果some_default
不是一个值,而是一个表达式,它必须被传递到dict.get()
前进行评估,而有如果你得到一个truthy值从你的字典中or
表达将不进行评估。例如:
v = my_dict.get(key, do_something_that_takes_a_long_time()) # function always called
v = my_dict.get(key) or do_something_that_takes_a_long_time() # function only called if needed
因此,虽然这是事实,它是不是安全使用or
如果你的字典可以包含falsey值,则可能会有性能上的优势。