为什么get和setdefault的这种组合不能按预期工作?

时间:2018-03-18 01:32:39

标签: python python-3.x python-2.7

在下面我会期望x == True除了x == False

k = 'key'
d = dict()
x = d.get(k, not d.setdefault(k, False))

print(d) # {'key': False}
print(x) # False

为什么会这样?

在任何情况下,我都喜欢在第一次调用时返回True的方法,否则返回False。我认为实现这样做的类并不那么难,但我怀疑应该有一种内置方式。

尝试使用Python 3.6 Anaconda。

1 个答案:

答案 0 :(得分:1)

dict.get()的参数在调用.get()之前得到评估。因此setdefault已经发生了。怎么样:

x = d.get(k) or not d.setdefault(k, True)

测试代码:

k = 'key'
d = dict()
x = d.get(k) or not d.setdefault(k, True)

print(d)  # {'key': False}
print(x)  # False

结果:

{'key': True}
False