rah*_*hmu 3 python dictionary switch-statement
我喜欢使用词典作为一种形式的switch陈述,通过设置布尔值作为键.例:
>>> def f(a):
... return {True: -a, a==0: 0, a > 0: a}[True]
...
>>> f(-3)
3
>>> f(3)
3
>>> f(0)
0
Run Code Online (Sandbox Code Playgroud)
密钥True作为else/ defaultcase使用,仅在未评估其他密钥时返回True.我猜这是假设迭代字典的某种评估顺序.
现在看一下Python团队最新发布的最新版本的分支2.6,2.7,3.1和3.2 的以下摘录:
散列随机化导致dicts和集的迭代顺序不可预测,并且在Python运行中不同.Python从未保证dict或set中键的迭代顺序,建议应用程序永远不要依赖它.从历史上看,dict迭代顺序在各个版本中并没有经常发生变化,并且在Python的连续执行之间始终保持一致.因此,一些现有的应用程序可能依赖于字典或集合排序.
这是否意味着使用dicts作为切换呼叫将不再可能?或者也许我应该使用任何其他类(喜欢OrderedDict或什么)?或者也许我完全不在了,它根本不应该影响到这一点?
散列随机化不会影响您的应用程序.它应该只影响依赖于字典中键的迭代顺序的应用程序.
也就是说,我发现你的技术比简单的if..elif链条更加模糊,效率也更低(建立一个新的dict并不便宜).
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |