说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
缩进是 Python 的特色,当其他大部分语言用花括号({})组织逻辑层次时,Python 为了让代码更加简洁而设计了缩进方式。PEP8 建议在上一个逻辑行后缩 4 个空格,但所有的Python 编辑器已经支持自动缩进,当语法需要缩进时,回车换行会帮助我们自动缩进,如果需要手动缩进可以按 Tab 键,按一次缩进一层。
常用的定义函数、for 循环等语句都需要缩进,例如:
def say():
print('Hello!')
for x in order:
if x == 'tom':
print(x, ' 好孩子! ')
elif x == 'lucy':
print(x, ' 你最漂亮! ')
else:
print(x, ' 加油加油你最棒! ')
函数 say() 中的 print() 相对于 def 关键字缩进一层,for 语句中的 if 等相对于 for 关键字缩进一层,print() 相对于 if 等又缩进一层,从而表达代码的逻辑关系。哪些语句需要缩进,可以查看本教程的其他语句的语法。
对于初学者来说缩进是比较难掌握的知识点,学会正确处理缩进意味着你已经迈入Python 的门槛。在代码编写中,我们要结合代码编辑器的自动格式化功能严格布局缩进和上下行空格,让代码更加美观易读。
缩进用于表示控制结构(如条件语句、循环、函数定义等)中的代码块的开始和结束。在 Python 中,缩进的空格数决定了代码块的层次结构。通常,每个缩进级别使用4个空格,但也可以使用制表符(tab)或不同数量的空格,只要在整个代码中保持一致。建议使用4个空格,因为这是 Python 社区的广泛接受的惯例。冒号用于引导代码块的开始。在 Python 中,冒号通常出现在控制结构的后面,然后下一行缩进表示代码块的开始。
在整个 Python 程序中,缩进必须保持一致。如果一个代码块使用4个空格的缩进,那么整个程序都应该使用4个空格的缩进。混合不同的缩进风格可能会导致语法错误。如果缩进不正确,Python 解释器将引发缩进错误(IndentationError)。这是 Python 中常见的错误之一,因此确保正确的缩进非常重要。
逻辑行开头的空白符(空格符和制表符)用于计算该行的缩进层级,决定语句组块。
制表符(从左至右)被替换为一至八个空格,缩进空格的总数是八的倍数(与 Unix 的规则保持一致)。首个非空字符前的空格数决定了该行的缩进层次。缩进不能用反斜杠进行多行拼接;首个反斜杠之前的空白符决定了缩进的层次。
源文件混用制表符和空格符缩进时,因空格数量与制表符相关,由此产生的不一致将导致不能正常识别缩进层次,从而触发 TabError。
跨平台兼容性说明: 鉴于非 UNIX 平台文本编辑器本身的特性,请勿在源文件中混用制表符和空格符。另外也请注意,不同平台有可能会显式限制最大缩进层级。
行首含换页符时,缩进计算将忽略该换页符。换页符在行首空白符内其他位置的效果未定义(例如,可能导致空格计数重置为零)。
连续行的缩进层级以堆栈形式生成 INDENT 和 DEDENT 形符,说明如下。
读取文件第一行前,先向栈推入一个零值,该零值不会被移除。推入栈的层级值从底至顶持续增加。每个逻辑行开头的行缩进层级将与栈顶行比较。如果相等,则不做处理。如果新行层级较高,则会被推入栈顶,并生成一个 INDENT 形符。如果新行层级较低,则 应当 是栈中的层级数值之一;栈中高于该层级的所有数值都将被移除,每移除一级数值生成一个 DEDENT 形符。文件末尾,栈中剩余的每个大于零的数值生成一个 DEDENT 形符。
下面的 Python 代码缩进示例虽然正确,但含混不清:
def perm(l):
# Compute the list of all permutations of l
if len(l) <= 1:
return [l]
r = []
for i in range(len(l)):
s = l[:i] + l[i+1:]
p = perm(s)
for x in p:
r.append(l[i:i+1] + x)
return r
下例展示了多种缩进错误:
def perm(l): # error: first line indented
for i in range(len(l)): # error: not indented
s = l[:i] + l[i+1:]
p = perm(l[:i] + l[i+1:]) # error: unexpected indent
for x in p:
r.append(l[i:i+1] + x)
return r # error: inconsistent dedent
(实际上,解析器可以识别前三个错误;只有最后一个错误由词法分析器识别 --- return r 的缩进无法匹配从栈里移除的缩进层级。)
更新时间:2024-05-05 07:58:51 标签:python 代码 缩进