首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python2.7.3中使用字典作为开关语句

在Python2.7.3中使用字典作为开关语句
EN

Stack Overflow用户
提问于 2012-04-17 07:55:20
回答 8查看 661关注 0票数 3

我喜欢使用字典作为switch状态的一种形式,通过设置布尔作为键。示例:

代码语言:javascript
运行
复制
>>> 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时才返回。我猜这假设了某种迭代字典的计算顺序。

现在查看最新版本的分支2.6、2.7、3.1和3.2的最新Python团队发布公告摘录:

散列随机化会导致dicts和set的迭代顺序不可预测,并且在Python运行期间有所不同。Python从来没有保证在dict或set中迭代键的顺序,并且建议应用程序永远不要依赖它。从历史上看,dict迭代顺序在不同版本之间变化不大,并且在Python的连续执行之间始终保持一致。因此,一些现有的应用程序可能依赖于dict或set排序。

这是否意味着不再可能使用dicts作为交换机调用?或者我应该使用其他类(比如OrderedDict之类的)?或者我完全离开了这不应该影响到这一切?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-04-17 08:00:54

你误解了这段代码的工作原理。

您的字典只有两个键:TrueFalseTrue键可能有多个相互冲突的值,但在字典初始化时就会解决。

字典查找没有迭代。

票数 6
EN

Stack Overflow用户

发布于 2012-04-17 08:00:56

散列随机化不会影响您的应用程序。它应该只影响依赖字典中键的迭代顺序的应用程序。

尽管如此,我发现您的技术比简单的if..elif链更晦涩,效率也更低(构建一个新的dict并不便宜)。

票数 5
EN

Stack Overflow用户

发布于 2012-04-17 08:00:16

使用字典散列条件的方式不会受到排序的影响。您严格使用键来访问字典,排序对您来说并不重要,因为您没有对键/值进行迭代。因此,您对字典的特定用法不受Python字典散列随机化的影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10187288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档