Bra*_*son 2 python optimization performance dictionary
Python中的以下两个语句之间是否存在任何差异(性能或其他)?
v = my_dict.get(key, some_default)
Run Code Online (Sandbox Code Playgroud)
VS
v = my_dict.get(key) or some_default
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 11
如果您的值为false-y,则会有很大差异:
>>> d = {'foo': 0}
>>> d.get('foo', 'bar')
0
>>> d.get('foo') or 'bar'
'bar'
Run Code Online (Sandbox Code Playgroud)
你应该不会使用or default,如果你的值可以是假的-Y.
最重要的是,使用or添加额外的字节码; 必须进行测试和跳转.只是使用dict.get(),这里使用没有任何好处or default.
还有另一个区别:如果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
Run Code Online (Sandbox Code Playgroud)
因此,虽然or如果您的字典可以包含虚假值,那么使用它确实不安全,但它可能具有潜在的性能优势。