返回介绍

Python 语法规则

发布于 2024-01-29 22:24:16 字数 2878 浏览 0 评论 0 收藏 0

第10章介绍过Python的语法模型。现在,我们要上升到像if这样更大的语句,而本节是对之前介绍过的语法概念进行复习并扩展。一般来说,Python都有简单和基于语句的语法。但是,有些特性是我们需要知道的。

·语句是逐个运行的,除非你不这样编写。Python一般都会按照次序从头到尾执行文件中嵌套块中的语句,但是像if(还有循环)这种语句会使得解释器在程序内跳跃。因为Python经过一个程序的路径叫做控制流程,像if这类会对其产生影响的语句,通常叫做控制流程语句。

·块和语句的边界会自动检测。就像我们所见到的,Python的程序块中没有大括号或"being/end"等分隔字符;反之,Python使用首行下的语句缩进把嵌套块内的语句组合起来。同样地,Python语句一般是不以分号终止的,一行的末尾通常就是该行所写语句的结尾。

·复合语句=首行+“:”+缩进语句。Python中所有复合语句都遵循相同格式:首行会以冒号终止,再接一个或多个嵌套语句,而且通常都是在首行下缩进的。缩进语句叫做块(有时叫做组)。在if语句中,elif和else分句是if的一部分,也是其本身嵌套块的首行。

·空白行、空格以及注释通常都会忽略。文件中空白行将忽略(但在交互模式提示符下不会)。语句和表达式中的空格几乎都忽略(除了在字符串常量内,以及用在缩进时)。注释总是忽略:它们以#字符开头(不是在字符串常量内),而且延伸至该行的末尾。

·文档字符串(docstring)会忽略,但会保存并由工具显示。Python支持的另一种注释,叫做文档字符串(简称docstring)。和#注释不同的是,文档字符串会在运行时保留下来以便查看。文档字符串只是出现在程序文件和一些语句顶端的字符串中。Python会忽略这些内容,但是,在运行时会自动将其附加在对象上,而且能由文档工具显示。文档字符串是Python更大型的文件策略的一部分,本书这一部分最后一章会讨论它。

就像你所见到的,Python没有变量类型声明。单就这一点而言,就让你拥有比以前用过的更为简单的语言语法。但是,对于大多数新用户而言,缺少许多其他语言用于标识块和语句的大括号和分号,似乎是Python最新颖的语法特点,所以让我们更详细地讨论这方面的意义。

代码块分隔符

Python会自动以行缩进检测块的边界,也就是程序代码左侧的空白空间。缩进至右侧相同距离的所有语句属于同一块的代码。换句话说,块内的语句会垂直对齐,就好像在一栏之内。块会在文件末尾或者碰到缩进量较少的行时结束,而更深层的嵌套块就是比所在块的语句进一步向右缩进。

例如,图12-1示范了下列程序代码的块结构。

图 12-1 嵌套块代码:一个嵌套块以再往右缩进的语句开始,碰到缩进量较少的语句或文件末尾时就结束

这段代码包含了三个模块:第一个(文件顶层代码)完全没有缩进,第二个(位于外层if语句内)则缩进四格,而第三个(位于嵌套if下的print语句)则缩进八格。

通常来说,顶层(无嵌套)代码必须于第1栏开始。嵌套块可以从任何栏开始。缩进可以由任意的空格和制表符组成,只要特定的单个块中的所有语句都相同即可。也就是说,Python不在乎你怎么缩进代码,只在乎缩进是否一致。每个缩进层级使用4个空格或者一个制表符,这是通常的惯例,但是Python世界中没有绝对的标准。

缩进代码实际上是相当自然的事情。例如,如下的代码段(肯定很傻)展示了Python代码中通常的缩进错误:

这段代码的正确的缩进版本如下所示——即便对于这样的一个人工编写的示例,正确的缩进也会使得代码看上去更好:

在Python中,知道空白的一种主要用途就是用于代码左侧作为缩进,这点很重要。在其他大多数环境中,可以在程序代码中加入空格或不加。尽管这样,缩进其实是Python语法中的一部分,而不仅仅是编程风格:任何特定单一块中的所有语句都必须缩进到相同的层次,否则Python会报告语法错误。这是有意而为之的,因为你不需明确标识嵌套代码块的开头和结尾,其他语言中常见的一些语法上的杂乱无章,在Python中是看不见的。

把缩进变成语法模型一部分,也强化了一致性,这是Python这种结构化编程语言中可读性的重要组成部分。Python的语法偶尔描述成是“所见即所得”——每行程序代码毫不含糊的缩进就告诉了读者它属于什么地方。这种一致的外观让Python程序更易于维护和重用。

缩进是再自然不过的事情了,并且它使得你的代码反映出了其逻辑结构。一致性的缩进代码总是可以满足Python的规则。再者,多数文字编辑器(包括IDLE)会在输入时自动缩进程序代码来轻松地遵守Python的缩进模型。

避免混合使用制表符和空格:Python 3.0中的新的错误检查

一条首要的规则是:尽管可以使用空格或制表符来缩进,在一段代码块中混合使用这两者通常不是好主意,请使用其中的一种。从技术上讲,制表符考虑到保留足够的空间以便把当前的栏数按照8的倍数来移动,并且,如果持续混合制表符和空格的话,代码也可以工作。然而,这样的代码可能很难修改。更糟糕的是,混合制表符和空格会使得代码难以阅读——制表符在另一个程序员的编辑器中看上去与在你的编辑器中的样子有很大不同。

实际上,当一段脚本在代码块中混合使用制表符和空格来缩进的时候(也就是说,以使得缩进依赖于制表符在空格上的等价形式),恰恰由于这些原因,Python 3.0现在发布了一个错误。Python 2.6允许这样的脚本运行,但是,它有一个-t命令行标志,会警告你制表符用法上的不一致,还有一个-tt标志会对这样的代码产生错误(你可以在一个系统shell窗口中使用诸如python-t main.py的命令行来切换)。Python 3.0的错误情况等同于Python 2.6的-tt切换。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文