Python的程序通过解析器进行读取,再通过分词器生成词元流,转为Unicode代码点。

每个程序的源文件为了便于编写和阅读,都会有多行。那么如果一行很长你的屏幕显示不下去,或者你不希望那么一行那么长,如何处理?

  • 显示拼接行

可用反斜杠(\)拼接。规则如下:在不以注释内的反斜杠结尾时,上一行将与下一行拼接成一行,然后这个反斜杠及其后的换行符被删除。


name = "adsf\
sfadsfadsfasdf"
print(name)

#adsfsfadsfadsfasdf
  • 隐式拼接行

圆括号、方括号、花括号内的表达式可以分成多个物理行,不必使用反斜杠。

month_names = ['January','February','March',      # 1-3月份
               'April','May','June',       # 4-6月份
               'July','August','September',  # 7-9月份
               'October','November','December']   # 10-12月份
  1. 隐式行拼接可含注释;
  2. 后续行的缩进并不重要;
  3. 还支持空的后续行。

缩进

程序编写时,使用空白符对行进行缩进,形成层级。不紧紧会了美观,还通过计算缩进层级决定语句组块。

首个非空字符前的空格数决定了该行的缩进层次。(注意:缩进不能用反斜杠进行多行拼接,在用多个反斜杠进行多行拼接时,首个反斜杠之前的空白符才决定缩进的层次)

# 函数定义的缩进
def calculate_average(numbers):
    # 第一级缩进 (4空格)
    total = sum(numbers)
    count = len(numbers)
    
    if count == 0:
        # 第二级缩进 (8空格)
        return 0  # 特殊情况处理
    else:
        average = total / count
        return average


# 类定义的缩进
class Student:
    # 类体第一级缩进 (4空格)
    
    def __init__(self, name, age):
        # 方法体第一级缩进 (8空格)
        self.name = name
        self.age = age
    
    def display_info(self):
        # 方法体第一级缩进 (8空格)
        if self.age >= 18:
            # 第二级缩进 (12空格)
            print(f"{self.name} 是成年人")
        else:
            print(f"{self.name} 是未成年人")


# 循环和条件语句的缩进
numbers = [1, 2, 3, 4, 5]
even_squares = []

for num in numbers:
    # 循环体第一级缩进 (4空格)
    if num % 2 == 0:
        # 条件体第一级缩进 (8空格)
        even_squares.append(num ** 2)
    else:
        print(f"跳过奇数: {num}")

print(f"偶数的平方: {even_squares}")


# 多行语句的缩进
long_string = (
    "这是一个非常长的字符串,"
    "为了可读性我们把它分成多行,"
    "注意括号内的对齐方式"
)

result = some_long_function_name(
    argument1, argument2,
    argument3, argument4
)

注释

注释以井号 (#) 开头,在行末尾截止。

注意,井号不是字符串字面值。除非应用隐式行拼接规则,否则,注释代表逻辑行结束。

句法不解析注释。

编码声明

Python 脚本第一或第二行的注释匹配正则表达式 coding[=:]\s*([-\w.]+) 时,该注释会被当作编码声明;

这个表达式的第一组指定了源码文件的编码。

编码声明必须独占一行,在第二行时,则第一行必须也是注释。编码表达式的形式如下:

# -*- coding: <encoding-name> -*-