Python中的以下两个语句之间是否有任何差异(性能或其他)?
v = my_dict.get(key, some_default)
vs
v = my_dict.get(key) or some_default
答案 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
是不安全的,那么这可能会带来性能上的优势。