NOTE目录骨架来自菜鸟教程 Python3 基础章节,表述与细节对照 Python 官方文档 与相关 PEP 核对。基于 Python 3。完整出处见文末 参考。
变量与赋值
Python 里没有「声明变量类型」的语法。名字通过赋值语句绑定到对象;同一个名字可以重新绑定到别的对象、别的类型。
x = 10x = "hello" # 合法:名字换绑到新对象赋值语句的完整语义见 Assignment statements。先记住:
=是绑定,不是数学里的「等式」。- 多重赋值:
a, b = 1, 2(右侧是可迭代对象,左侧是目标列表)。 - 增强赋值:
+=、-=等,对可变对象可能是原地修改(见下文)。
a, b = 1, 2a, b = b, a # 交换,无需临时变量x = y = [] # 两个名字绑到**同一个**列表对象,改一个会影响另一个x, y = [], [] # 两个独立空列表,更安全链式比较是 Python 特色:0 < x < 10 等价于 0 < x and x < 10(Comparisons)。
可变与不可变
Built-in Types 里,对象分可变与不可变:
| 不可变(常见) | 可变(常见) |
|---|---|
int float complex bool | list |
str bytes | dict set |
tuple(容器本身不可变;元素若是 list 仍可改内容) | bytearray |
不可变对象的内容不能原地改;「修改」会产生新对象并重新绑定名字。可变对象可以原地改,所有引用它的名字都会看到变化。
s = "hello"# s[0] = "H" # TypeError:str 不可变s = "Hello" # 新字符串,名字 s 换绑
lst = [1, 2, 3]lst.append(4) # 原地改,id(lst) 不变other = lstother.append(5)print(lst) # [1, 2, 3, 4, 5] —— 同一对象tuple 本身不可变,但若元素是可变对象(如内嵌 list),元素内容仍可改:
t = ([1, 2], 3)t[0].append(3) # 合法# t[0] = [9] # TypeError:不能替换 tuple 的槽位后面写 list / dict 时还会碰到这一区分:改的是名字绑的对象,还是对象本身。
六种内置类型(总览)
菜鸟教程把 Python 内置类型归纳成六类;官方 stdtypes 按协议与实现展开。入门对照表:
| 类型 | 字面量示例 | 要点 |
|---|---|---|
数字 int / float / complex | 42 3.14 1+2j | 下一篇细讲运算与进制 |
字符串 str | 'hi' "你好" | 不可变文本序列,下一篇专讲 |
列表 list | [1, 2, 3] | 有序可变序列 |
元组 tuple | (1, 2) (1,) | 有序不可变序列;单元素要逗号 |
字典 dict | {'a': 1} | 键值映射,键须可哈希 |
集合 set | {1, 2, 3} | 无序、元素唯一;空集合用 set() |
另外还有 bool、NoneType(唯一值 None)、bytes / bytearray 等;不算进「六种」但日常会碰到。
用内置函数探测类型:
type(42) # <class 'int'>type([]) is list # Trueisinstance(3.0, int) # Falseisinstance(True, int) # True —— 见下一节bool 是 int 的子类
True / False 是 bool 类型的两个实例;bool 继承自 int(Boolean Type)。
True == 1 # TrueFalse == 0 # TrueTrue + True # 2int(True) # 1isinstance(False, int) # Truetype(True) is int # False —— 类型仍是 bool因此 bool 可以参与算术,但语义上应只用于逻辑,不要依赖 True is 1(is 比较身份,见后文)。条件、循环里「空容器为假」等规则见 Truth Value Testing。
type 与 id
type(obj):返回对象的类型(类)。id(obj):在 CPython 中通常是对象内存地址的整数,同一时刻同一对象 id 相同;对象被回收后 id 可能复用。
a = [1, 2]b = ac = [1, 2]print(id(a) == id(b)) # True —— 同一对象print(a is b) # Trueprint(a is c) # False —— 值相等,对象不同print(a == c) # Trueis 比较身份(是否同一对象),== 比较值(是否 __eq__ 相等)。判断是否为 None 习惯写 x is None,不要用 ==。小整数、驻留字符串可能让 is 碰巧为真,那是实现细节。
CAUTION菜鸟教程身份运算符一节常举例「两个相等的整数 / 元组
is为真」。那是 CPython 小整数缓存等实现细节,官方 Comparisons 要求:语义上只用is判断「是不是同一个对象」,相等用==。不要把a is b当成a == b的快捷写法。
类型转换
显式转换
内置构造函数即转换函数(Built-in Functions):
int("42") # 42int("1010", 2) # 二进制字符串 → 10float("3.14")str(123)list("abc") # ['a', 'b', 'c']tuple([1, 2])bool(0) # False;非零数为 Truebool("") # False;非空串为 True转换失败抛 ValueError;具体规则以各类型文档为准。完整函数表见附录(含 chr/ord/repr 等)。不要用 eval 去「转换」不可信字符串。
隐式转换
混合数值运算时,Python 按 Numeric Types 拓宽类型。记忆口诀 bool → int → float → complex 只描述运算结果类型;bool 本身仍是 int 的子类(上一节)。不会把数字和字符串自动相加:
3 + 4.5 # 7.5,int 与 float 运算得 float# "3" + 4 # TypeError"3" + str(4) # "34",需显式转布尔上下文(if / while / and / or)里会调用对象的真值测试,不是把 int 转成 bool 再存回变量。
del 语句
del 是语句,不是函数。常见用法:
x = 1del x # 解除名字绑定,再访问 x 会 NameErrorlst = [1, 2, 3]del lst[0] # 删除元素,见第 4 篇del lst[1:]d = {"a": 1}del d["a"] # 删除键,见第 5 篇bytes 入门
Binary Sequence Types:bytes 不可变,元素是 0–255 的整数;bytearray 可变。字面量 b"hello"(内容须为 ASCII 或转义)。文本 ↔ 二进制用 str.encode / bytes.decode,第 3 篇再写。
b = b"hi"b[0] # 104,不是 'h'bytearray(b"hi")[0] = 72算术运算符
| 运算符 | 含义 | 备注 |
|---|---|---|
+ - * / | 加 减 乘 真除 | / 总是 float(3/2 → 1.5) |
// | 地板除 | 向负无穷取整;-7//3 → -3 |
% | 余数 | 与地板除配套:a == (a//b)*b + (a%b) |
** | 幂 | 右结合:2**3**2 → 2**(3**2) |
+x -x | 一元正负 |
7 // 3 # 2-7 // 3 # -37 % 3 # 12 ** 10 # 1024对非数字类型,+ 可能被重载(如 str 拼接、list 合并);其他算术若未定义则 TypeError。数字细节见下一篇。
比较运算符
链式比较:a < b <= c 等价于 a < b and b <= c,且 b 只求值一次。
| 运算符 | 含义 |
|---|---|
== != | 相等 / 不等 |
< > <= >= | 大小(同类型或可比协议) |
不同类型比较是否合法、如何比,以 Comparisons 与具体类型为准;不要依赖 Python 2 的旧规则。
赋值与增强赋值
| 形式 | 等价于(概念上) |
|---|---|
x = expr | 名字绑定 |
x += y | x = x.__iadd__(y) 或回退到 x = x + y |
x //= y x **= y 等 | 同理 |
对不可变对象,+= 通常创建新对象再绑定;对 list 等,+= 往往原地扩展(extend)。若需要新列表,用 x = x + y 或切片复制,别假设所有类型行为一致。
海象运算符 :=(PEP 572)在表达式内赋值,控制流篇再展开;知道存在即可。
位运算符
作用于整数二进制位(Bitwise operations):
| 运算符 | 含义 |
|---|---|
& | ^ | 与、或、异或 |
~ | 按位取反 |
<< >> | 左移、右移 |
0b1010 & 0b1100 # 0b1000 → 81 << 4 # 16bool 参与位运算会先当 0/1 用。日常业务少用;读标志位、权限掩码时会碰到。
逻辑运算符
| 运算符 | 含义 | 短路 |
|---|---|---|
and | 全真则取最后一值 | 左假则不再求右 |
or | 有真则取第一个真值 | 左真则不再求右 |
not | 逻辑非 | 返回 True/False |
0 and 99 # 0(不是 False,是操作数本身)"" or "default" # "default"not [] # True逻辑运算返回的是操作数对象,不一定是 bool;条件语句里再按真值规则解释。
成员与身份运算符
| 运算符 | 含义 |
|---|---|
in / not in | 成员测试(序列、映射、集合) |
is / is not | 是否同一对象(比较 id) |
"a" in "abc" # True1 in {1, 2} # Truex is Nonex is not y== 与 is 勿混:小整数缓存等实现细节不应依赖 a is b 代替 a == b。
运算符优先级
表达式求值顺序见 Operator precedence。记不住时加括号。官方从高到低(同级除 ** 外从左到右;** 右结合,且高于左侧的一元 +/-/~,所以 -2**2 是 -4):
| 级别(高→低) | 运算符 |
|---|---|
| 原子、订阅、调用 | (…) x[i] x() x.attr |
| 幂 | ** |
| 一元算术 / 位 | +x -x ~x |
| 乘除模 | * @ / // % |
| 加减 | + - |
| 移位 | << >> |
| 位与 | & |
| 位异或 | ^ |
| 位或 | | |
| 比较、成员、身份 | == in is 等 |
| 逻辑非 | not x |
| 逻辑与 | and |
| 逻辑或 | or |
| 条件表达式 | x if c else y |
| lambda | lambda |
| 海象 | := |
2 + 3 * 4 # 14,不是 20(not False) and True2 ** 3 ** 2 # 512,即 2 ** (3 ** 2)附录:内置类型速查
| 函数 | 作用 |
|---|---|
type(x) | 类型 |
isinstance(x, cls) | 是否该类型(含子类) |
id(x) | 对象标识 |
len(x) | 长度(有 __len__ 的对象) |
hash(x) | 哈希值(可哈希对象) |
常见构造函数:int() float() complex() str() bool() list() tuple() dict() set() frozenset() bytes() bytearray()。另见 round() abs() divmod()(数字篇)。参数形式以 Built-in Functions 为准。
菜鸟 数据类型转换 有一张总表,下面按官方函数核对后列出(eval 会执行代码,不要对不可信输入使用):
| 函数 | 作用 |
|---|---|
int float complex | 数值 |
str repr ascii | 文本 / 可打印表示 |
chr / ord | 码点 ↔ 单字符 |
bin oct hex | 整数 → 带前缀的进制字符串 |
list tuple set frozenset | 从可迭代对象构造 |
dict | 从键值对可迭代对象或关键字参数构造 |
bytes bytearray memoryview | 二进制视图 |
bool | 真值测试 |
附录:运算符一览
| 类别 | 运算符 |
|---|---|
| 算术 | + - * / // % ** @(矩阵乘,NumPy 等) |
| 比较 | == != > < >= <= |
| 赋值 | = += -= … := |
| 逻辑 | and or not |
| 位 | & | ^ ~ << >> |
| 成员 | in not in |
| 身份 | is is not |
参考
官方文档(中文版 可对照阅读):
- An Informal Introduction to Python — 数字、字符串入门示例
- Built-in Types — 类型分类、可变/不可变、真值测试
- Built-in Functions —
int/float/str/bool等 - Operator precedence
- Assignment statements
- Comparisons
- Truth Value Testing
- The del statement
- Binary Sequence Types
PEP:
- PEP 572 — Assignment Expressions(海象运算符,可选读)
目录来源(骨架,不以它为准改语法):