Python基础语法速查表:变量、数据类型与运算符
编写 Python 程序的核心基础,在于掌握变量如何存储与传递数据、不同数据类型的特性及其适用边界,以及通过运算符构建精确计算逻辑。本文梳理了日常开发中最高频使用的变量赋值机制、常用内置数据类型、运算符优先级及隐式类型转换规则,并配合内存原理图与流程图,提供一份拿来即用的速查参考。
一、变量定义与引用机制
Python 中的变量不需要显式声明类型。与 C/Java 等静态语言中“变量是固定内存槽”不同,Python 中的变量本质上是一个贴在内存对象上的标签(引用)。执行赋值语句时,解释器先在堆内存中创建具体的数据对象,然后将变量名绑定到该对象的内存地址上。
# 基础赋值:变量名绑定到整数对象
counter = 100
# 多变量多重赋值
x = y = z = 0
# 解包赋值(多元赋值)
width, height, label = 1920, 1080, "MainCanvas"
# 变量重新赋值改变的是引用指向,原对象在无引用时被垃圾回收(GC)
data = 42
data = "hello" # data 重新指向字符串对象,原整数 42 失去引用
- 必须以字母或下划线
_开头,后续可包含字母、数字和下划线,严格区分大小写。 - 禁止使用 Python 保留关键字(如
class,def,if,import,pass等)。 - 普通变量与函数采用蛇形命名法(
user_age),常量推荐全大写(MAX_CONNECTIONS)。
二、核心数据类型及字面量表示
Python 数据类型可从“基础标量类型”与“复合容器类型”进行区分,也可以从其在内存中是否可就地修改划分为可变类型(Mutable)与不可变类型(Immutable)。
1. 数值类型(Number)
int(整数):Python 3 整数具有任意精度,不会产生整型溢出错误。支持二进制(0b1010)、八进制(0o77)、十六进制(0xFF)。float(浮点数):双精度 64 位浮点实现,支持科学计数法(1.25e-3)。注意由于二进制表示限制,存在精度舍入特性。bool(布尔值):只有True和False,继承自int,True == 1且False == 0。
2. 序列与集合类型
str(字符串,不可变):支持单引号、双引号、三引号多行文本。常用f"{var}"格式化。list(列表,可变):有序集合,元素类型可异构,通过下标读取与切片修改,如[1, "item", 3.14]。tuple(元组,不可变):一旦创建不可增删改其直接元素引用,如(10, 20)。单元素元组必须加逗号(1,)。dict(字典,键值对,键不可变,值可变):基于哈希表实现,键必须是可哈希(不可变)对象,检索速度极快,如{"id": 101, "status": "active"}。set(集合,可变,无序唯一):自动去重,常用于交集、并集和成员检测,如{1, 2, 3}。
三、运算符分类与计算规则
Python 提供了丰富的运算符,包含算术、比较、逻辑、赋值、成员和身份六大类。每种运算符在特定数据类型上有重载行为。
| 分类 | 常用运算符 | 关键特性与行为说明 |
|---|---|---|
| 算术运算符 | +, -, *, /, //, %, ** |
/ 结果永远是 float;// 为向下取整地板除;** 为幂运算(如 2**3 == 8)。 |
| 比较运算符 | ==, !=, >, <, >=, <= |
比较两者的“值”是否相等。支持链式比较:10 < x < 20 等价于 (10 < x) and (x < 20)。 |
| 身份运算符 | is, is not |
判断两个变量是否引用堆内存中的同一对象(比较 id(a) == id(b)),与 == 值比较截然不同。 |
| 逻辑运算符 | and, or, not |
具备短路求值特性:若左侧已决定表达式真假,则右侧表达式不会被执行,且返回决定结果的操作数本身。 |
| 成员运算符 | in, not in |
判断元素是否存在于序列或集合中。在 set 和 dict 中查找时间复杂度为 O(1),在 list 中为 O(n)。 |
| 复合赋值 | +=, -=, *=, /= 等 |
对可变对象(如列表)lst += [1] 会触发原地修改(extend),不可变对象则新建对象重新绑定。 |
逻辑运算符短路求值逻辑
# and: 遇到第一个假值直接返回该假值;全真则返回最后一个操作数
result_and = "" and "Python" # 返回 ""(空字符串为假)
result_and_true = 100 and "OK" # 返回 "OK"
# or: 遇到第一个真值直接返回该真值;全假则返回最后一个操作数
config_host = user_input or "127.0.0.1" # 用户未输入时采用默认值
四、高频陷阱与开发避坑指南
虽然 Python 语法精炼,但动态引用和弱约束也带来了一些初学者常踩的隐蔽陷阱。在编写生产代码时,应当重点关注以下几点:
1. is 与 == 的使用边界
== 比较内容相等(调用对象的 __eq__ 方法),而 is 比较身份标识(堆内存物理地址)。在判断单例对象(如 None)时必须使用 is None,而在比对数值或字符串内容时必须使用 ==。
2. 浅拷贝与可变对象共享引用
# 陷阱:列表乘法创建的是多个指向同一子列表的引用
matrix = [[0] * 3] * 3
matrix[0][0] = 1
# 实际结果是每行的第0个元素全部变成了1:[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# 正确做法:使用列表推导式独立实例化
safe_matrix = [[0] * 3 for _ in range(3)]
safe_matrix[0][0] = 1 # 仅第一行生效
3. 浮点数计算精度舍入
计算机内部使用 IEEE 754 双精度浮点格式,导致部分十进制小数无法精确表示,如 0.1 + 0.2 == 0.3 返回 False。在金融或严格计费场景中,必须使用 decimal.Decimal 模块,或者使用 math.isclose(a, b) 进行浮点公差判定。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













