具有默认值的 dict.get 的可读性
Readability of dict.get with a default value
这是通过 key
从 dictionary
获得 value
的传统方法,并提供 default
值作为回退:
value = dictionary.get(key, default)
但是,我想出了在 get
中省略 default
值并改用 or
技巧:
value = dictionary.get(key) or default
后一种方法通常会更具可读性吗?
它的可读性并没有提高(它们基本上是一样的),而且更容易出现微妙的错误。
如果dictionary[key]
是任何假值(None
、空字符串、list
、tuple
等。 ,或任何零值数字),后者产生 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
这是通过 key
从 dictionary
获得 value
的传统方法,并提供 default
值作为回退:
value = dictionary.get(key, default)
但是,我想出了在 get
中省略 default
值并改用 or
技巧:
value = dictionary.get(key) or default
后一种方法通常会更具可读性吗?
它的可读性并没有提高(它们基本上是一样的),而且更容易出现微妙的错误。
如果dictionary[key]
是任何假值(None
、空字符串、list
、tuple
等。 ,或任何零值数字),后者产生 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