我喜欢使用字典作为语句的一种形式,将布尔值设置为键。例子:

>>> def f(a):
...      return {True: -a, a==0: 0, a > 0: a}[True]
...
>>> f(-3)
3
>>> f(3)
3
>>> f(0)
0

switch作为True/else情况工作,只有在没有其他键计算为default时才返回我猜这假设了迭代字典的某种求值顺序。
下面是最新版本分支2.6、2.7、3.1和3.2的release announcement from the Python team摘录:
散列随机化导致dict和set的迭代顺序为
Python运行中的不可预测性和差异性巨蟒从来没有
dict或set中键的保证迭代顺序及其应用
建议不要依赖它历史上,dict迭代顺序
在不同版本中并没有经常改变,并且一直保持
在连续执行Python之间保持一致因此,一些
现有的应用程序可能依赖于DICT或SET排序。
这是否意味着将dict用作交换调用将不再可能或者我应该使用其他类(如True或其他类)?或者也许我完全不在了,这根本不应该影响到这件事?

最佳答案

你误解了这段代码的工作原理。
你的字典只有两个键:TrueFalseTrue键可能有多个冲突值,但在初始化字典时会得到解决。
字典查找没有迭代。

10-05 20:54
查看更多