dict.get(key,default)vs dict.get(key)或default

时间:2015-10-21 15:43:03

标签: python performance dictionary optimization

Python中的以下两个语句之间是否有任何差异(性能或其他)?

v = my_dict.get(key, some_default)

vs

v = my_dict.get(key) or some_default

2 个答案:

答案 0 :(得分:9)

如果您的值为false-y,则存在巨大差异:

>>> d = {'foo': 0}
>>> d.get('foo', 'bar')
0
>>> d.get('foo') or 'bar'
'bar'

如果您的值可能为假,则使用or default

最重要的是,使用or添加额外的字节码;必须进行测试和跳转。只需使用dict.get(),在此处使用or default就没有优势。

答案 1 :(得分:1)

还有另一个区别:如果some_default不是值而是表达式,则必须在传递给dict.get()之前对其求值,而对于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是不安全的,那么这可能会带来性能上的优势。