- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论