我使用a dict作为短期缓存.我想从字典中获取一个值,如果字典中没有该键,则设置它,例如:
val = cache.get('the-key', calculate_value('the-key'))
cache['the-key'] = val
Run Code Online (Sandbox Code Playgroud)
在'the-key'已经存在的情况下cache,第二行不是必需的.对此有更好,更短,更具表现力的习语吗?
Dar*_*mas 13
是的,使用:
val = cache.setdefault('the-key', calculate_value('the-key'))
Run Code Online (Sandbox Code Playgroud)
shell中的一个例子:
>>> cache = {'a': 1, 'b': 2}
>>> cache.setdefault('a', 0)
1
>>> cache.setdefault('b', 0)
2
>>> cache.setdefault('c', 0)
0
>>> cache
{'a': 1, 'c': 0, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://docs.python.org/release/2.5.2/lib/typesmapping.html
geo*_*org 12
可读性很重要!
if 'the-key' not in cache:
cache['the-key'] = calculate_value('the-key')
val = cache['the-key']
Run Code Online (Sandbox Code Playgroud)
如果你真的喜欢单行:
val = cache['the-key'] if 'the-key' in cache else cache.setdefault('the-key', calculate_value('the-key'))
Run Code Online (Sandbox Code Playgroud)
另一种选择是__missing__在缓存类中定义:
class Cache(dict):
def __missing__(self, key):
return self.setdefault(key, calculate_value(key))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7535 次 |
| 最近记录: |