一本最薄的规则手册
Python 以易读著称,这很大程度上是因为它实际上没有几条语法规则。重要的那几条一页纸就能写完:
- 每行一条语句。
- 缩进决定结构,没有花括号,也没有
end关键字。 - 区分大小写。
name和Name是不同的。 :开启一个代码块;它下面缩进的几行就是代码块的主体。#开始一条注释。
基本就是这些。其余的都是变量、函数和标准库的使用习惯,你会边学边掌握。下面我们逐一讲解这五条规则,并给出足够的背景,让它们不再像是规则,而是这门语言自然的样子。
每行一条语句
语句是一条完整的指令:“打印这个”“把这些加起来”“给那个赋值”。在 Python 中,每条语句单独占一行:
三条语句,三行代码。行尾不需要分号,大多数 Python 代码也不用分号。(你可以用分号把两条语句写在一行里,但这被认为是不好的风格。别这么做。)
如果某一行确实需要很长,你可以在圆括号、方括号或花括号内部的自然位置换行,Python 不会报错:
另一种不太常见的做法是在行尾加反斜杠来续行。能用括号的时候尽量用括号,大多数代码库都是这么做的。
缩进就是结构
这是让新手犯难的地方。在 Python 中,行首的空白是有意义的。它告诉 Python 哪些行属于同一组。
看一个简单的 if:
if hour < 12: 之后的两行缩进了四个空格。Python 把这种缩进理解为“这两行是 if 的主体”。最后一个 print 回到了左边界,所以 Python 认为它在 if 之外。
如果去掉缩进,if 就会出错。如果多缩进了一个空格,if 也会出错。Python 在这里很严格,因为缩进本身就是结构,没有 { 或 end 来兜底。
由此可以得出几条规则:
- 每级缩进固定用四个空格。这是 PEP 8 的约定,也是所有编辑器对
.py文件的默认设置。 - 不要混用制表符和空格。Python 3 会拒绝同时使用两者的文件。现代编辑器在保存时会自动把制表符转换成空格;请确认你的编辑器是这样设置的。
- 缩进错误在所难免。出错时,错误信息会告诉你行号。去检查那一行的行首空白是否和同级的行一致。
冒号开启代码块
所有会创建嵌套代码块的结构(if、else、for、while、def、class、with、try)都在首行末尾加一个冒号。接下来缩进的几行构成代码块的主体:
注意两点:首行末尾的冒号,以及主体各行的四个空格缩进。如果你忘了冒号,Python 会提示类似 SyntaxError: expected ':' 的错误。这个错误一目了然,补上漏掉的标点就好了。
大小写敏感
Python 把 Name、name 和 NAME 当作三个完全不同的东西。这适用于:
- 你自己定义的变量和函数。
print、len、True、False、None等内置名字。- 模块名和属性名。
通常只有在你不小心写错大小写时才会被坑。True 是布尔值真;true 是一个未定义的变量,会引发 NameError。Print(...) 不是 print 函数,而是拼写错误。
如果错误提示“name 'X' is not defined”,而你确信自己定义过它,请先检查大小写。十有八九就是这里写错了。
用 # 写注释
一行中 # 之后的所有内容都是注释,Python 会完全忽略它。注释是写给以后读代码的人(包括以后的你)的说明:
Python 没有多行注释语法。如果需要写好几行,就用多个 # 开头的行。(你有时会看到用三引号字符串充当伪注释,那是另一回事,叫文档字符串,我们会在讲函数时介绍。)
保留字
有些单词不能用作变量名,因为 Python 自己要用:if、else、for、while、def、class、return、import、from、as、pass、break、continue、True、False、None、and、or、not、in、is、lambda、try、except、finally、raise、with、yield、global、nonlocal、async、await。你不需要背下这个列表。如果你用了其中一个,Python 会马上报错。
现在你已经能读懂任何 Python 文件
你刚才读到的每条规则都适用于每个 Python 文件,不管是两行的脚本,还是十万行的项目。这门语言的其余部分都建立在这五个概念之上。如果某个文件看起来令人困惑,解决办法几乎总是先关注缩进。在你读懂每一行写了什么之前,缩进就已经告诉你代码在做什么了。
下一步:更深入地了解注释,以及文档字符串,也就是 Python 为函数和模块编写文档的方式。
常见问题
Python 为什么在意缩进?
Python 用缩进来判断哪些代码行属于同一组。其他语言用花括号 { } 把一组代码包起来,而 Python 用一致的行首空白来代替。这样视觉上更简洁,但也意味着你不能随意对待空格。
Python 缩进应该用几个空格?
社区标准(PEP 8)是每级缩进四个空格。在 Python 文件中按 Tab 键时,大多数编辑器都会插入四个空格。具体用几个空格不如保持一致重要,在同一个代码块中混用两个空格和四个空格的缩进是常见错误。
Python 区分大小写吗?
区分。Name、name 和 NAME 是三个不同的变量。print 和 True 这样的内置名字必须严格按显示的样子拼写:True 可以用,true 会报错。