问题描述
Python中的以下两个语句之间有什么区别(性能或其他)?
v = my_dict.get(key, some_default)
对比
v = my_dict.get(key) or some_default
1楼
如果您的值是则存在巨大差异:
>>> d = {'foo': 0}
>>> d.get('foo', 'bar')
0
>>> d.get('foo') or 'bar'
'bar'
你不应该使用or default
,如果您的值可以是假的-Y。
最重要的是,使用or
添加额外的字节码;
必须执行测试和跳转。
只需使用dict.get()
,在这里使用or default
没有优势。
2楼
还有另一个区别:如果some_default
不是值而是表达式,则必须在传递给dict.get()
之前对其进行评估,而如果您从字典中获得真值,则不会评估 with 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
您的字典可能包含假值,但可能会带来性能优势。