我遇到了一个奇怪的Python行为,很难向自己解释。当我传递一个默认值以从dict中获取一个键时,看起来它首先尝试查找该默认值,然后再查找键是否存在。如果dict中存在密钥,则抛出一个错误。为什么会发生这种情况?你知道吗
from collections import namedtuple
Test = namedtuple("TEST", "attr1 attr2 attr3")
obj_1 = Test("first", "second", "third")
obj_1.attr1
>>> 'first'
k_dict = {"red": "light", "green": "leaf"}
k_dict.get("red")
>>> 'light'
k_dict.get("red", obj_1.attr4)
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'TEST' object has no attribute 'attr4'
更新:我知道这里的问题是什么,但我不明白为什么这是Python的默认行为?为什么不检查第一部分-如果key
在dict中,如果不是-检查另一部分?现在看来这不是最佳的计算方法?你知道吗
它与
dict.get
无关在python中调用函数时,会计算参数。你知道吗
在本例中,键存在,但在进行键查找之前,需要对这两个参数进行求值。你知道吗
例如,“工作”应该是:
因为
red
键存在,所以不计算第二个参数。只有当red
不存在时它才会崩溃。在这种情况下没有多大帮助(无论结果如何,你这样做的方法都有抓住错误的优点,所以至少要继续这样做!),但如果您有一些复杂的计算要作为默认参数执行,它将:即使
red
存在,当:当
red
存在时是快的。or
技术依赖于这样一个事实,即值不能是0
,而只能是None
。否则就用if "red" in k_dict
构造。你知道吗相关问题 更多 >
编程相关推荐