switch
我喜欢通过将布尔值设置为键来使用字典作为语句的一种形式。例子:
>>> def f(a):
... return {True: -a, a==0: 0, a > 0: a}[True]
...
>>> f(-3)
3
>>> f(3)
3
>>> f(0)
0
该键True
用作else
/default
情况,仅当没有其他键被评估为时才返回True
。我猜这假设了某种迭代字典的评估顺序。
现在查看Python 团队最新发布公告的以下摘录,了解最新版本的分支 2.6、2.7、3.1 和 3.2:
哈希随机化导致 dicts 和 set 的迭代顺序是不可预测的,并且在 Python 运行中会有所不同。Python 从未保证 dict 或 set 中键的迭代顺序,建议应用程序永远不要依赖它。从历史上看,dict 迭代顺序在不同版本之间并没有经常改变,并且在 Python 的连续执行之间始终保持一致。因此,一些现有的应用程序可能依赖于 dict 或 set 排序。
这是否意味着不再可能使用 dicts 作为 switch 调用?或者也许我应该使用任何其他类(比如OrderedDict
或其他东西)?或者也许我完全关闭了,它根本不应该影响这个?