dict.get(键,默认值)VS dict.get(键)或默认

问题描述 投票:1回答:2

有没有在Python以下两个语句之间的任何差别(性能或其他方式)?

v = my_dict.get(key, some_default)

VS

v = my_dict.get(key) or some_default
python performance dictionary optimization
2个回答
11
投票

有一个巨大的区别,如果你的价值是false-y

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

你不应该使用or default如果你的值可以是假的-Y。

最重要的是,使用or增加了额外的字节码;测试和跳转必须执行。只要使用dict.get(),没有任何优势,使用or default这里。


3
投票

还有一个区别:如果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值,则可能会有性能上的优势。

© www.soinside.com 2019 - 2024. All rights reserved.