编写可靠的工程代码必须遵循严格的语法规范。本节将重点阐述 Python 独特的缩进规则、注释习惯、模块化概念以及基础的输入输出要求,帮助大家在实操前建立起规范的编程思维与底层认知。
注释#
注释是源代码中对代码进行解释的部分,或表示临时不需要运行的代码片段,注释会被解释器完全忽略。Python 中的单行注释以 # 开头,如下所示:
# 这是一行注释
# 这是另一行注释
print('Hello, world!') # 这是代码末尾的注释,# 号前面一般保留两个空格
# print('Hello, world!') # 此行代码已被注释,将不会被执行
小技巧在许多现代代码编辑器(如 VS Code)中,可以按 Ctrl+/(macOS 为 Command+/)键将当前行或选中行快捷变为注释;当这些行已经是注释时,再次按下则会取消注释。
Python 本身不支持传统意义上的多行注释符(或称块注释)。如果需要多行注释,标准做法是在每行开头插入一个 #。另外,还有一种变通的方法:由于 Python 会忽略未分配给任何变量的独立字符串文字,因此可以使用多行字符串(三单引号 ''' 或三双引号 """)来充当多行注释:
"""
这相当于
一个
多行注释
"""
print('Hello, world!')
缩进#
处在行首的空白字符(空格和水平制表符 Tab)称为缩进。Python 强制使用缩进来划分代码块(C 或 Java 等其他语言多是使用大括号 { } 来划分)。当语句以冒号 : 结尾时,其后紧跟的一行或多行具有相同缩进深度的语句,将被视为同一个代码块。如下所示:
# 打印一个整数的绝对值
v = -33
if v >= 0:
print(v)
else:
print(-v)
致命避坑警告按照官方惯例,应该使用 4 个空格来表示一层缩进。请绝对不要在同一个文件中混用空格和 Tab 键!肉眼看起来可能都对齐了,但解释器会直接报错(
IndentationError)。幸运的是,现代编辑器(如 VS Code)通常会自动将你按下的 Tab 键转换为 4 个空格。
模块#
简单来说,每个以扩展名 .py 结尾的 Python 源文件都是一个模块。模块中一般包含可重用的变量、类型和计算函数。其他代码可以通过导入(import)的方式,读取并使用这个模块中定义的内容。Python 本身自带了一个庞大且功能丰富的模块库(称为标准库),要使用其中的功能,必须先导入它。
import math
print(math.pi)
作为一种特性,我们也可以在交互模式下,通过导入模块的方式来运行某个源文件所在的逻辑:
>>> import hello # 注意:不可输入文件的 .py 后缀
Hello, world!
但需要注意的是,这种方式主要用于加载模块缓存,每次打开交互模式,同一个文件只能被 import 运行一次。因此,它并不是我们在日常工程中执行脚本的常规方法。
简单输入和输出#
内置的 print 函数用于将内容格式化显示在标准输出设备上(通常指屏幕)。该函数可以同时接受多个参数,各个参数间以英文逗号 , 分割;生成的输出中,各个参数间会自动添加一个空格。
内置的 input 函数用于获取来自标准输入设备(通常指键盘)的输入内容。你可以在括号内提供一段提示字符串。需要特别强调的是:input 函数获取的返回值永远是“字符串”类型,哪怕你在键盘上敲下的是纯数字。
name = input('请输入你的名字:')
city = input('你来自哪个城市?')
# 请对比以下两行输出结果的差异:
print('欢迎您!来自', city, '的', name, '。')
print('欢迎您!来自' + city + '的' + name + '。')
一个稍微更复杂点的示例#
斐波那契(Fibonacci)数列由 0 和 1 开始,之后的每个元素都是由之前的两数相加而得出(即 0, 1, 1, 2, 3, 5…)。下面我们将综合运用刚才学到的知识,编写一段代码:接收用户的输入,计算并打印斐波那契数列中的前 n 个数。
fib0 = 0
fib1 = 1
# 使用 int() 函数,将 input 接收到的纯文本字符串强制转换为整数类型
n = int(input('你想要生成多少个斐波那契数? '))
if n >= 1:
print(fib0)
for i in range(n - 1):
# 借助 temp 临时变量完成数值交换
temp = fib0 + fib1
fib0 = fib1
fib1 = temp
print(fib0)
程序的运行结果如下:
py fib.py
你想要生成多少个斐波那契数? 5
0
1
1
2
3
进阶提示:Python 的优雅赋值在上述代码中,我们使用了传统的
temp变量来协助交换两个数值。而在 Python 中,得益于“元组解包”特性,你可以直接写成:fib0, fib1 = fib1, fib0 + fib1仅仅一行代码就完成了计算和变量的同步更新,无需借助临时变量。你将在后续章节中大量体会到这种独属于 Python 的简洁之美。