2. Python 基础语法与变量
Python 基础语法与变量
目录
- Python 的语法基石
- 1.1 缩进与代码块
- 1.2 注释的艺术
- 1.3 语句、换行与分号
- 标识符与关键字
- 2.1 命名规则与约定
- 2.2 保留关键字一览
- 变量与动态类型
- 3.1 变量的本质:名称绑定
- 3.2 动态类型与类型查询
- 3.3 多重赋值与变量交换
- 基本输入与输出
- 4.1
print()函数详解 - 4.2
input()交互式输入
- 4.1
- 数字类型入门
- 5.1 整数
int - 5.2 浮点数
float - 5.3 复数
complex - 5.4 算术运算符与优先级
- 5.5 类型转换与进制表示
- 5.1 整数
- 字符串基础
- 6.1 创建字符串
- 6.2 转义字符与原始字符串
- 6.3 字符串格式化
- 实战练习与常见错误
- 总结
1. Python 的语法基石
1.1 缩进与代码块
Python 最独特的语法特征就是使用缩进来表示代码块的归属,而不像 C/Java 那样使用花括号 {}。同一代码块内的语句必须拥有相同的缩进空白数量,通常使用 4个空格(PEP 8 强烈建议)。
if True:
print("缩进正确")
print("我属于 if 块")
print("我已在 if 块之外")
错误的缩进会引发 IndentationError:
if True:
print("缩进缺失") # IndentationError: expected an indented block
缩进的严格性迫使程序员写出结构清晰的代码,这正是“可读性很重要”的体现。保持整个文件中缩进风格一致(空格 vs 制表符)至关重要。推荐使用空格,并配置编辑器将 Tab 键自动转为 4 个空格。
1.2 注释的艺术
注释是写给人类阅读的说明,解释器会完全忽略它们。
- 单行注释:以
#开头,直到行尾。# 计算圆的面积 area = 3.14 * r ** 2 - 多行注释:通常使用三个连续引号(
'''或""")包裹长文本。虽然 Python 没有真正的多行注释语法,但这样的字符串未被赋值给变量,解释器会将其视为文档字符串(docstring),通常用在模块、函数、类定义的首行。""" 这是一个多行注释(文档字符串) 常用于描述代码用途 """
好的注释解释为什么而不是做了什么(代码本身已经说明了做了什么)。避免冗余的注释,如 x = x + 1 # 将 x 加 1。
1.3 语句、换行与分号
- Python 中一般一行就是一条语句,语句结束不需要分号。
- 如果想在一行包含多条语句,可以用分号分隔,但极不推荐,这牺牲了可读性。
a = 1; b = 2 # 可行但丑陋 - 过长的语句可以使用反斜杠
\换行,但更优雅的是利用 Python 的隐式换行:在圆括号()、方括号[]、花括号{}内部,可以自由换行。total = (first_variable + second_variable + third_variable)
2. 标识符与关键字
2.1 命名规则与约定
标识符(变量名、函数名、类名等)必须符合以下规则:
- 由字母(A-Z, a-z)、数字(0-9)或下划线
_组成,不能以数字开头。 - 区分大小写(
name与Name不同)。 - 不能与 Python 关键字重名。
PEP 8 推荐的命名风格:
- 变量、函数、模块:小写字母,词之间用下划线
snake_case(如my_variable,calculate_area())。 - 常量:全大写,下划线分隔
MAX_OVERFLOW。 - 类:大驼峰
CamelCase(如MyClass)。 - 避免使用单字符
l(易与数字1混淆)、O(易与0混淆)。 - 以
_开头的名称表示“私有”或内部使用(是一种约定)。
2.2 保留关键字一览
Python 内置了一些单词作为关键字,它们有特殊含义,不能用作标识符。可以通过 keyword 模块查看:
import keyword
print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break',
# 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally',
# 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal',
# 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
记住常用关键字,特别是流程控制相关的,会帮助你更快理解代码结构。
3. 变量与动态类型
3.1 变量的本质:名称绑定
在 Python 中,变量不是一个存储数据的“盒子”,而只是附加到对象上的一个名称(标签)。赋值语句 x = 10 的意思是把名称 x 绑定到整数对象 10 上。当我们再执行 x = "hello",名称 x 就重新绑定到了一个字符串对象,原来指向的整数对象可能会被垃圾回收。
这个观念很重要,它解释了为什么 Python 没有声明类型,以及为什么以下情况发生:
a = [1, 2, 3]
b = a # b 和 a 指向同一个列表对象
b.append(4)
print(a) # [1, 2, 3, 4] —— a 也变了!
这里 b = a 并没有复制列表,只是给同一个对象增加了一个别名。
3.2 动态类型与类型查询
Python 是动态类型语言,变量可以随时改变所引用对象的类型,不需要提前声明。
- 使用
type()函数查看对象的类型:x = 42 print(type(x)) # <class 'int'> x = "forty-two" print(type(x)) # <class 'str'> - 使用
isinstance()检查对象是否属于某种类型,支持继承关系:print(isinstance(42, int)) # True print(isinstance(42, object)) # True(所有类都继承自 object)
3.3 多重赋值与变量交换
Python 支持同时为多个变量赋值,大大简化了代码。
x, y, z = 10, 20, 30 # 多重赋值
# 变量交换,无需临时变量
x, y = y, x
print(x, y) # 20 10
这种机制本质上是“元组打包和解包”:右侧的 y, x 先被构筑成一个元组,然后依次解包赋值给左侧的变量。
还可以用 * 收集多余的值:
a, *b, c = [1, 2, 3, 4, 5]
print(a) # 1
print(b) # [2, 3, 4] 中间部分会变成一个列表
print(c) # 5
4. 基本输入与输出
4.1 print() 函数详解
print() 是最常用的输出函数,它将参数打印到标准输出(屏幕)。
- 打印多个值,默认用空格分隔:
print("你好", "世界", 2025) # 你好 世界 2025 sep参数自定义分隔符:print("妈妈", "爸爸", "我", sep=", ") # 妈妈, 爸爸, 我end参数指定结尾字符,默认是换行符\n:print("Loading", end="...") print("Done") # Loading...Done
4.2 input() 交互式输入
input() 等待用户输入,返回一个字符串(即使用户输入的是数字)。
name = input("请输入你的名字:")
print(f"你好,{name}")
注意 input() 总是返回 str,如果需要数字,务必进行类型转换:
age = int(input("请输入年龄:"))
print(f"明年你就 {age + 1} 岁了")
5. 数字类型入门
5.1 整数 int
Python 的整数是任意精度的,不会像 C 语言那样溢出。你可以计算非常大的数:
print(2 ** 1000) # 一个巨大的整数,无压力
整数可以直接用十进制表示,也支持二进制(0b 或 0B)、八进制(0o)、十六进制(0x)形式:
print(0b1010) # 10
print(0o12) # 10
print(0xA) # 10
5.2 浮点数 float
浮点数基于 IEEE 754 双精度标准,可能存在精度误差,这是所有编程语言都面临的问题。
print(0.1 + 0.2) # 0.30000000000000004
需要高精度十进制时,可使用 decimal 模块。
5.3 复数 complex
Python 内置复数支持,虚部用 j 或 J 表示:
c = 3 + 4j
print(c.real) # 3.0
print(c.imag) # 4.0
print(c.conjugate()) # (3-4j)
5.4 算术运算符与优先级
| 运算符 | 描述 | 示例 |
|---|---|---|
+ | 加法 | 2 + 3 → 5 |
- | 减法 | 5 - 2 → 3 |
* | 乘法 | 2 * 3 → 6 |
/ | 除法(浮点) | 7 / 2 → 3.5 |
// | 整除(地板除) | 7 // 2 → 3 |
% | 取余 | 7 % 2 → 1 |
** | 幂运算 | 2 ** 3 → 8 |
优先级从高到低:** > 正负号 +x -x > * / // % > + -。不清晰时使用括号。
5.5 类型转换与进制表示
int()可将字符串或浮点数转为整数(直接截断小数部分)。int("42") # 42 int(3.9) # 3 int("1010", 2) # 10 (二进制字符串转整数)float()将整数或字符串转为浮点数。bin(),oct(),hex()将整数转为对应进制的字符串表示:bin(10) # '0b1010' hex(255) # '0xff'
6. 字符串基础
6.1 创建字符串
字符串可以使用成对的单引号 '...' 或双引号 "..."。两者的功能完全等价,选择哪种往往取决于内容中是否包含引号:
s1 = "I'm fine"
s2 = 'He said, "Hello"'
多行字符串用三个连续引号:
long_text = """第一行
第二行
第三行"""
6.2 转义字符与原始字符串
反斜杠 \ 用来引入特殊字符,如 \n 换行、\t 制表符、\\ 反斜杠本身、\' 引号等。
print("第一行\n第二行")
如果不希望转义发生,使用原始字符串,在字符串前加 r:
path = r"C:\Users\new" # 不会把 \n 当换行
print(path) # C:\Users\new
6.3 字符串格式化
Python 提供了多种格式化方式,f-string(formatted string literals)是最现代且推荐的方法。
name = "Alice"
age = 25
# f-string
print(f"{name} is {age} years old.")
# 可以内嵌表达式
print(f"Next year {name} will be {age + 1}")
# format 方法
print("{} is {} years old.".format(name, age))
# 旧式 % 格式化(不推荐)
print("%s is %d years old." % (name, age))
f-string 从 Python 3.6 开始可用,它速度快、可读性高。建议在新代码中优先使用。
7. 实战练习与常见错误
下面是一个综合运用变量、数字、字符串和输入输出的小例子:
# 计算 BMI
height_cm = float(input("请输入你的身高(cm):"))
weight_kg = float(input("请输入你的体重(kg):"))
height_m = height_cm / 100
bmi = weight_kg / (height_m ** 2)
print(f"你的 BMI 是 {bmi:.1f}") # .1f 保留一位小数
常见错误:
- 忘记类型转换:
age = input("年龄:")后直接age + 1报错,因为age是字符串。 - 缩进不一致:混用空格和 Tab。
- 变量未定义:使用了未赋值的变量。
- 整数除法误解:
/总是得到浮点数,即使整除结果也是浮点;//才是整除。
8. 总结
本节你学习了 Python 最基础的语法规则和变量系统:缩进决定代码块、严格的命名规则、变量只是对象的标签、以及数字和字符串的基本操作。这些知识是构建所有 Python 程序的基石。在下一节,我们将进入核心数据类型的深入世界——列表、字典等内置容器,让数据组织变得灵活而强大。掌握这些基础后,你将能够阅读和编写许多实用的小脚本。
动手试一试:写一个程序,从用户那里读取两个数字,输出它们的加、减、乘、除结果,并保持适当的格式。这是对所学内容的最好巩固。
更多推荐
所有评论(0)