Python不支持开关语句的原因设密码

  

Python不支持开关语句的原因设密码?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

为什么想要聊这个话题呢?

主要是因为开关在其它语言中太常见了,而Python却不支持,这样的独特性本身就值得关注,而回答这个问题,也能更加看清Python在程序设计上的理念,了解Python在语法设计中的决策过程。

本文除了会详细分析pep - 275和pep - 3103,还会介绍到Python最新的发展动态(pep - 622),即可能要引入的模式匹配(模式匹配)语法,相信这个话题会开阔大家的眼界,从而对开关语法有更为全面的认识。

1时,开关是什么?

在开始正题之前,我们需要先聊聊开关是什么?

有些同学可能会第一时间想到它……

 Python不支持开关语句的原因设密码

喂~喂~,麻烦收收心,别总想着游戏啦,我们要说的是编程语言中的开关语句。

一般而言,开关的语法格式如下:

开关(表达式){案例value1://语句   打破;//可选   案例value2://语句   打破;//可选   默认值://可?/语句}复制代码

使用流程图来表示,大概是这样的:

 Python不支持开关语句的原因设密码

它的用法不难理解:开关语句的值满足哪一个案件情况,就会执行对应的代码块,执行时遇到打破就跳出,否则就继续执行下一个案例分支,一般会在最后放一个默认分支,作为兜底。

大多数语言都提供了开关语句或者极其相似的东西,例如,在C/c++/Java/去等静态语言中,它们都支持切换实例结构;在Ruby中有类似的情况下结构,在壳牌语言中,有相似的一次结构,在Perl中,有switch-case-else……

开关语句的好处是支持“单条件多分支”的选择结构,相比if - else的二分选择结构,在某些时候会更为简洁清晰。

但是,在Python中,我们看不到切换实例或者相近的语法结构,这是为什么呢?

2, Python为什么不支持开关吗?

官方文档中有一篇FAQ包含了这个问题:为什么没有一个开关或Python中的case语句?

 Python不支持开关语句的原因设密码

常见问题即常见问题的缩写,表示常见问题,官方列了27个常见问题,完整清单在此:mp.weixin.qq.com/s/zabIvt4df…

该文档给出了几个建议,告诉了我们几个switch/case的替代方案:

    <李>使用if-elif-else条件判断语句 <李>使用字典,将中值与调用的函数映射起来李 <李>使用内置getattr()检索特定的对象调用方法

曾有人提出过一些提案(即pep - 275和pep - 3103),想给Python引入语转换法,然而,对于“<强>是否以及如何进行靶场测试强”,大家没有达成一致的共识。

靶场测试,即测试范围,指的是对武器弹药的技术性能作各种测试验证,与药物的临床试验一样,都是在最终产品交付前的一项关键性测试。

官方文档对于“为什么Python不引入开关”的解释,实际上来源于Python之父Guido van Rossum在pep - 3103中的意见:

 Python不支持开关语句的原因设密码

出处:www.python.org/dev/peps/pe…

我快速调查期间在演讲PyCon 2007显示了这个提议没有民众支持。因此,我拒绝。

我在PyCon 2007的主题演讲中做了一个快速的民意调查,结果表明这个提案没有得到广泛的支持,因此,我拒绝了它。

简而言之,<强> PEP提案有了,语法实现也有了雏形,但是核心开发者们似乎没有达成一致意见,最终导致提案流产了。

3, PEP - 275与PEP - 3103说了什么?

PEP - 3103是在2006年提出的,PEP - 275则是在2001年提出的,它们的共同之处是提出了引入开关语句的某种必要性,分析了好几种备选的实现方案,然而,结局是都被拒绝了。

 Python不支持开关语句的原因设密码

出处:www.python.org/dev/peps/pe…

那么,我们就先来回顾一下核心开发者们都做出了哪些讨论,看一看如果Python要实现开关结构,会是怎么样子的? (PS: PEP里还涉及其它内容,本文只摘取与开关直接相关的部分)

Python不支持开关语句的原因设密码