具有默认值的 dict.get 的可读性

Readability of dict.get with a default value

这是通过 keydictionary 获得 value 的传统方法,并提供 default 值作为回退:

value = dictionary.get(key, default)

但是,我想出了在 get 中省略 default 值并改用 or 技巧:

value = dictionary.get(key) or default

后一种方法通常会更具可读性吗?

它的可读性并没有提高(它们基本上是一样的),而且更容易出现微妙的错误。

如果dictionary[key]任何假值(None、空字符串、listtuple等。 ,或任何零值数字),后者产生 default。如果 key 实际上不存在,get 只会生成 default

关于可读性,我会说它们是一样的。然而,作为惯例,我们习惯于 some_dict.get("someKey", None) 运行时差异似乎也很小。

python -m timeit '{}.get("key", "someDefault")'
>>> 2000000 loops, best of 5: 144 nsec per loop

python -m timeit '{}.get("key") or "someDefault"'
>>> 2000000 loops, best of 5: 147 nsec per loop

当密钥确实存在时,我们会看到类似的结果

python -m timeit '{"key": "value"}.get("key", "someDefault")'
>>> 2000000 loops, best of 5: 183 nsec per loop

python -m timeit '{"key": "value"}.get("key") or "someDefault"'
>>> 2000000 loops, best of 5: 187 nsec per loop