|
|
51CTO旗下网站
|
|
移步端
  • Python 为什么要有 pass 说话?

    关于 Python 中的pass说话,他似乎很简单(只有 4 个字母),即使是没有其他编程经验的初学者也能很快地掌握它的用法。

    笔者:咖啡豆花从猫 来源:Python猫| 2020-07-28 00:48

    关于 Python 中的pass说话,他似乎很简单(只有 4 个字母),即使是没有其他编程经验的初学者也能很快地掌握它的用法。

    法定文档 的介绍十分简单,下的三个比喻可以让咱快速地了解到如何运用它:

    大概而言,pass 是一种空操作(null operation),诠释器执行到他的时节,除了检查语法是否合法,什么也不做就直接跳过。

    他跟 return、break、continue 和 yield 等等的非空操作相比,最大的分别是他不会改变程序的推行顺序。他就像我们写的诠释,除了占用一行代码行,不会对所处的企图域产生任何影响。

    但是,如果你有其他语言的根基,你也许会好奇:为什么 Python 有这么独特之 pass 说话,而别的语言却没有?

    Python 这么设计,到底是由于什么原因呢?

    是为了消灭大部分编程语言都要面对的根本性问题,还是因为他有友好之新发现,故此创造出来一下新的特性?

    扭亏增盈:Python 为什么要有 pass 说话,他能解决什么问题(好处),如果没有她,会导致什么问题(坏处)?

    然后,本文将下两个维度展开分析。

    1. 对人:表现空间占位符

    我把他看作是一种简单的诠释方式,等于是说“此地先预留位置,回头再补上实际的编码实现”。

    比如在多层的 if-elif-else 布局中,咱们可以先把判断标准写好,下一场在回答的块中写上 pass,自此再慢慢完善。

    比如上文中给出的例证,咱们可以先写好类/函数名及其入参,下一场跳过(pass)重点代码,自此再慢慢填充。

    pass 写起来简单,而且由于是关键字,IDE 会给出明显的颜色区分,故此就比我们写上注释内容来得方便些。

    pass 表现空间占位符,重点可以从容我们构思局部的编码结构,有稳定的援助提醒作用。

    但是,若作为一种注释方式,他就显得太单薄了,比不上写“# todo: xxxx”,后者也会把 IDE 用颜色突显,而且意思更鲜明。虽然写起来简单,但他也引入了一番看似多余的关键字 pass。

    故此,副空中占位符的力度来看,pass 不是编程语言中必须的计划要素。

    有了他,咱们可以发挥出“此地有东西,但暂时跳过”的涵义,但如果没有她,则可以用注释内容来替代。

    2. 对机械:为了语法完整性

    对于前一枝之用法,pass 出现在代码中的位置在理论上是不受限的。

    但是,咱们最常使用 pass 时,基本是在冒号的副一行,而且在该层缩进的编码块中,只有这一枝语句。(参见前文之 3 个比喻,为了方便,咱们仅以以空函数为例)

    咱们可以考虑下,如果不写它,会怎样?

    答案是会报缩进错误:IndentationError: expected an indented block

          
    1. # 名将函数体的 pass 剔除,会报错 
    2. def func(): 
    3.  
    4. func() 

    因为 Python 采用缩进来划分代码块(至于原因,请查阅《Python为什么使用缩进来划分代码块?》),而冒号标识着要出现新的缩进代码块,故此这个例子会报缺少缩进代码块。

    如果我们用前文说的诠释来替代,探望会怎样?

          
    1. # 名将函数体的 pass 交换注释 
    2. def func(): 
    3.     # todo:此地有东西,自此补上 
    4. func() 

    这样写,也会报错:IndentationError: expected an indented block

    原因是注释并非有效的语法内容,他会把 Python 诠释器忽略掉(ignore),不像 pass 说话那样是“使得的语法内容,但是跳过”。

    具体地说,缩进代码块中必须包含有语法意义之情节,下的例证都是行之有效的:

          
    1. def func(): 
    2.     """这是一番字符串""" 
    3.  
    4. def func2(): 
    5.     123456 

    Python 在定义函数时,必须包含函数体,即同时包含声明加定义两种语义,决不能像某些语言可以只利用声明的涵义,即写成void test(); 。

    但是,出于 Python 不采取花括号,他无法像某些语言那样直接定义出空函数,即写成void test(){} 。

    概括以上的剖析,Python 在定义空函数时,必须要有合法的函数体,故此设计出表示空操作的 pass 说话。他是为了补充语法的周期性,连同冒号,等效于其他语言中有的空的彩色括号。

    副语法完整性的维度上看,他是必须的计划要素,如果没有的话,也必须用类似之空语句或特殊符号来替代。

    对人方面,pass 可以表示“暂时跳过”的意思,表现临时的占位符,末了会把实际的编码实现所替换;对机械方面,他则可以表示“直接跳过”,只为了补齐语法逻辑,并不会把其他代码所替换。

    其他语言没有专门的一种语句或者符号来表示这种占位符(即语义有所欠缺),但是它们也不需要费心思专门设计一个关键字来补齐语法完整性(即语法完备)。

    返回本文开头的题材:Python 为什么要有 pass 说话,他能解决什么问题(好处),如果没有她,会导致什么问题(坏处)?

    Python 采用 pass 说话,是为了支持纯粹空操作的编码块(空函数、空类、空的循环控制块等等),有了他,还能额外表达出一种占位符的涵义。

    前者是对于机器而言的,必须要有,等效于其他语言中空花括号的企图;后者是对于人来讲的,非必须的,可以用注释来表达,但因为 Python 计划了这个讲话,这种用法有时候还挺厚实的。

    【编纂推荐】

    1. 很快提升Python数据分析能力的七个神奇方法
    2. 6个优质可视化Python库
    3. C,Java和Python之间的性质比较
    4. 相比之下Excel,怎么用Python获取指定月最后一角的日子
    5. 你在滥用Python吗?初学者常会遇到的5个现象
    【义务编辑: 赵宁宁 TEL:(010)68476606】

    点赞 0
  • Python  pass说话  付出
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    大数据安全运维实战

    大数据安全运维实战

    CDH+Ambari
    共20章 | 数据陈浩

    91人口订阅学习

    实操老:Jenkins接轨交付和后续部署

    实操老:Jenkins接轨交付和后续部署

    微服务架构下的无部署
    共18章 | freshman411

    182人口订阅学习

    思科交换网络安全指南

    思科交换网络安全指南

    安全才能无忧
    共5章 | 思科小牛

    109人口订阅学习

    视频课程+更多

    项目管理实战-如何推动项目

    项目管理实战-如何推动项目

    教授:陈志文953人口学习过

    Wireshark网络安全协议分析

    Wireshark网络安全协议分析

    教授:曲广平1409人口学习过

    架构之路 - JAVA的设计模式精讲

    架构之路 - JAVA的设计模式精讲

    教授:王军伟29339人口学习过

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微