爲了說明我創建了一個簡單的例子問題:爲什麼setdefault在設置密鑰時評估默認值?
#!/usr/bin/env python
class Person():
def __init__(self):
self.cache = {}
def get_person_age(self):
def get_age():
print "Calculating age..."
return self.age
print self.cache
return self.cache.setdefault(self.name, get_age())
def set_person(self, name, age):
self.name = name
self.age = age
p = Person()
p.set_person('andrei', 12)
for k in range(0, 5):
p.get_person_age()
我會想到,一旦緩存設置功能get_person_age將再次從來沒有所謂的,但事實卻並非如此:
$ python cache_test.py
{}
Calculating age...
{'andrei': 12}
Calculating age...
{'andrei': 12}
Calculating age...
{'andrei': 12}
Calculating age...
{'andrei': 12}
Calculating age...
函數被一次又一次地調用。怎麼了?
無論函數'setdefault'是否使用它,參數總是會被創建。 –