我想你希望在键不存在时仅应用可调用对象。有几种方法可以实现这一点。其中一种方法是使用defaultdict,如果键不存在则调用
run()
。
from collections import defaultdict
def run():
print "RUNNING"
test = {'store':1}
test.get('store', run())
test = defaultdict(run, store=1)
test['store']
test['runthatstuff']
另一种相对不太好看的方法是,只在字典中保存返回适当值的可调用函数。
test = {'store': lambda:1}
test.get('store', run)()
test.get('runrun', run)()
如果您希望返回值取决于缺失的键,则需要子类化defaultdict:
class mydefaultdict(defaultdict):
def __missing__(self, key):
val = self[key] = self.default_factory(key)
return val
d = mydefaultdict(lambda k: k*k)
d[10]
@mydefaultdict
def d2(key):
return -key
d2[5]
如果你不想将这个值添加到字典中以便下一次调用,你可以使用
def __missing__(self, key): return self.default_factory(key)
相反,它每次未明确添加 key: value
对时都会调用默认工厂函数。
get
将返回该键的值。你想要实现什么? - Daniel Rosemanrun
只在值不存在时调用,因为他当前的get
会在任何情况下都被调用。我澄清了他问题的最后一行。 - agfrun()
?人们可能认为get()
不会在不需要时使用默认值。 - Caleb Kochget
函数不会对其进行任何操作,但忽略该参数并不会阻止其被计算。 - user2357112