gpt4 book ai didi

python - 为什么 setdefault 在设置键时评估默认值?

转载 作者:太空狗 更新时间:2023-10-30 00:45:00 27 4
gpt4 key购买 nike

为了说明这个问题,我创建了一个简单的例子:

#!/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 中,而是在 Python(以及大多数语言)中的一般原则中,即必须在调用函数之前评估所有参数。也就是说,即使在 Python 检查键是否在字典中之前,它也需要知道键的值和默认值:并且由于默认值是函数的结果,因此必须首先调用该函数.

关于python - 为什么 setdefault 在设置键时评估默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com