Python 速查表:语法、命令和内置函数一览表
Python 语法依靠缩进而不是花括号:冒号后面的代码块缩进 4 个空格。基础包括无需声明类型的变量、if/elif/else 条件、for 和 while 循环、def 函数,以及 print、len、range、input、type 等内置函数和字符串、列表、字典的常用方法。
这份速查表把入门头几个月最常用的内容集中在一页:Python 语法、循环、内置函数,字符串、列表和字典的方法,以及终端命令。每张表都是一份简短的参考,附带可以直接粘贴到 REPL 里运行的示例。
Python 基础语法
Python 语法最大的特点是用缩进而不是括号来划分代码块。以冒号结尾的行(if、for、def、class)之后,下面的代码要缩进 4 个空格。不要混用 Tab 和空格,否则会得到 IndentationError。
| 语法结构 | 示例 | 说明 |
|---|---|---|
| 注释 | # 文本 | # 之后到行尾的内容都会被忽略 |
| 变量 | age = 25 | 不需要声明类型,类型由值决定 |
| 多重赋值 | a, b = 1, 2 | 解包;交换两个值:a, b = b, a |
| 输出 | print("你好", name) | 多个参数之间用空格分隔 |
| 输入 | s = input("姓名: ") | 总是返回字符串 |
| f-string | f"{name}: {price:.2f}" | 嵌入表达式并设置格式 |
| 类型注解 | count: int = 0 | 给 IDE 和类型检查工具的提示,运行时不检查 |
| 空代码块 | pass | 语法要求有代码体时的占位符 |
| 导入 | from math import sqrt | 导入模块或模块中的某个名字 |
数据类型
| 类型 | 字面量 | 可变 |
|---|---|---|
int | 42, 1_000_000 | 否 |
float | 3.14, 1e-3 | 否 |
bool | True, False | 否 |
str | "文本", '文本', """多行文本""" | 否 |
list | [1, 2, 3] | 是 |
tuple | (1, 2), (1,) | 否 |
dict | {"a": 1} | 是 |
set | {1, 2},空集合用 set() | 是 |
NoneType | None | — |
运算符
| 类别 | 运算符 | 示例 → 结果 |
|---|---|---|
| 算术 | + - * / // % ** | 7 // 2 → 3, 7 % 2 → 1, 2 ** 10 → 1024 |
| 比较 | == != < > <= >= | 1 < x < 10 — 链式比较 |
| 逻辑 | and or not | x or "默认值" |
| 成员 | in, not in | "a" in "abc" → True |
| 身份 | is, is not | x is None |
| 赋值 | += -= *= /=, := | if (n := len(s)) > 10: ... |
条件语句与模式匹配
if score >= 90:
grade = "A"
elif score >= 70:
grade = "B"
else:
grade = "C"
status = "成年人" if age >= 18 else "未成年人" # 条件表达式(三元运算)
match command:
case "start":
print("启动")
case "stop" | "exit":
print("停止")
case _:
print("未知命令")
False、None、0、空字符串和空集合都被视为假,所以通常不写 if len(items) > 0,而直接写 if items。
Python 循环语法:for 与 while
for 循环
Python for 循环的语法是 for 变量 in 序列:,后面跟缩进的循环体。它可以遍历任何可迭代对象:字符串、列表、字典、文件、range。
for i in range(5): # 0 1 2 3 4
print(i)
for i in range(10, 0, -2): # 10 8 6 4 2
print(i)
for i, fruit in enumerate(["苹果", "梨"], start=1):
print(i, fruit)
for name, score in zip(names, scores):
print(name, score)
for key, value in prices.items():
print(key, value)
while 循环
attempts = 3
while attempts > 0:
password = input("密码: ")
if password == "secret":
print("登录成功")
break
attempts -= 1
else:
print("尝试次数已用完") # 没有执行 break 时才会运行
| 命令 | 作用 |
|---|---|
break | 提前跳出循环 |
continue | 跳到下一次迭代 |
循环的 else | 循环没有被 break 中断时执行 |
range(stop), range(start, stop, step) | 数字序列,不包含 stop |
推导式(comprehension)
squares = [x ** 2 for x in range(10)]
evens = [x for x in numbers if x % 2 == 0]
lengths = {word: len(word) for word in words}
unique = {c.lower() for c in text}
total = sum(x * x for x in range(100)) # 生成器表达式
函数
def greet(name: str, greeting: str = "你好") -> str:
"""返回问候语。"""
return f"{greeting}, {name}!"
def total(*args, **kwargs):
return sum(args), kwargs
square = lambda x: x * x
print(greet("小美")) # 你好, 小美!
print(greet("小美", greeting="嗨")) # 嗨, 小美!
| 元素 | 含义 |
|---|---|
def f(a, b=1) | 带默认值的参数 |
*args | 任意数量的位置参数(元组) |
**kwargs | 任意数量的关键字参数(字典) |
return | 返回值;没有它函数返回 None |
lambda x: ... | 只含一个表达式的简短匿名函数 |
global, nonlocal | 修改外层作用域中的变量 |
不要使用可变对象作为默认值,例如 def f(items=[]):这个列表只创建一次,会在多次调用之间不断累积。正确写法是 items=None,在函数内部写 if items is None: items = []。
Python 内置函数
Python 内置函数无需导入即可使用。下面是几乎每个脚本都会用到的常用函数,包括 print、input、map 和 zip。
| 函数 | 作用 | 示例 → 结果 |
|---|---|---|
print() | 输出值 | print(1, 2, sep="-") → 1-2 |
input() | 从键盘读取一行字符串 | int(input()) |
len() | 集合或字符串的长度 | len("abc") → 3 |
type() | 对象的类型 | type(3.0) → <class 'float'> |
isinstance() | 检查类型 | isinstance(5, int) → True |
int() float() str() bool() | 类型转换 | int("42") → 42 |
list() tuple() set() dict() | 创建集合类型 | list("ab") → ['a', 'b'] |
range() | 数字范围 | list(range(3)) → [0, 1, 2] |
enumerate() | 生成(索引, 元素)对 | list(enumerate("ab")) → [(0, 'a'), (1, 'b')] |
zip() | 把多个序列按位置配对 | list(zip([1, 2], "ab")) → [(1, 'a'), (2, 'b')] |
sum() min() max() | 求和、最小值、最大值 | max([3, 7, 1]) → 7 |
abs() round() | 绝对值和四舍五入 | round(3.14159, 2) → 3.14 |
sorted() | 返回排好序的新列表 | sorted(words, key=len, reverse=True) |
reversed() | 反向迭代器 | list(reversed([1, 2])) → [2, 1] |
map() filter() | 对每个元素应用函数 / 过滤 | list(map(str, [1, 2])) → ['1', '2'] |
any() all() | 至少一个为真 / 全部为真 | all(x > 0 for x in nums) |
open() | 打开文件 | open("a.txt", encoding="utf-8") |
help() dir() | 帮助信息和属性列表 | help(str.split), dir(list) |
id() hash() | 对象的标识和哈希值 | hash("a") |
最方便的参考手册就在手边——REPL 里的 help():help(dict) 会列出字典的所有方法及说明,dir(obj) 则给出可用名字的列表。
字符串方法
Python 字符串是不可变的:每个方法都返回一个新字符串。切片用法与列表相同:s[1:4],s[::-1] 表示反转。
| 方法 | 示例 → 结果 |
|---|---|
upper() lower() | "Py".upper() → 'PY' |
capitalize() title() | "hello world".title() → 'Hello World' |
strip() lstrip() rstrip() | " hi \n".strip() → 'hi' |
split(sep) | "a,b,c".split(",") → ['a', 'b', 'c'] |
join(iterable) | "-".join(["a", "b"]) → 'a-b' |
replace(old, new) | "猫".replace("猫", "狗") → '狗' |
find() index() | "hello".find("l") → 2;找不到返回 -1(index 会报错) |
count() | "banana".count("a") → 3 |
startswith() endswith() | "file.py".endswith(".py") → True |
isdigit() isalpha() isspace() | "123".isdigit() → True |
removeprefix() removesuffix() | "test_a".removeprefix("test_") → 'a' |
zfill() center() ljust() | "7".zfill(3) → '007' |
format() | "{} + {}".format(1, 2) → '1 + 2' |
Python 列表方法
列表是可变的有序集合。大多数方法会原地修改列表并返回 None,所以 a = a.sort() 是常见错误。
| 操作 | 作用 | 示例 |
|---|---|---|
append(x) | 在末尾添加元素 | a.append(4) |
extend(iter) | 添加所有元素 | a.extend([5, 6]) |
insert(i, x) | 按索引插入 | a.insert(0, "first") |
remove(x) | 删除第一个等于该值的元素 | a.remove(3) |
pop(i) | 删除并返回元素(默认最后一个) | last = a.pop() |
clear() | 清空列表 | a.clear() |
index(x) | 第一次出现的索引 | a.index("b") |
count(x) | 出现次数 | a.count(1) |
sort() | 原地排序 | a.sort(key=str.lower) |
reverse() | 原地反转 | a.reverse() |
copy() | 浅拷贝 | b = a.copy() |
del a[i] | 按索引或切片删除 | del a[1:3] |
| 切片 | a[start:stop:step] | a[-1] 是最后一个,a[:3] 是前三个 |
Python 字典方法
| 操作 | 作用 | 示例 |
|---|---|---|
d[key] | 按键取值,键不存在时抛出 KeyError | d["name"] |
get(key, default) | 取值或返回默认值 | d.get("age", 0) |
d[key] = value | 添加或修改 | d["city"] = "北京" |
keys() values() items() | 键、值、键值对 | for k, v in d.items(): |
update() | 合并另一个字典 | d.update({"a": 1}) |
d1 | d2 | 返回合并后的新字典 | merged = defaults | user |
pop(key, default) | 删除并返回值 | d.pop("tmp", None) |
popitem() | 删除最后加入的键值对 | d.popitem() |
setdefault(key, value) | 返回值;键不存在时先创建 | d.setdefault("tags", []).append("py") |
key in d | 检查键是否存在 | if "name" in d: |
dict.fromkeys() | 用一组键和同一个值创建字典 | dict.fromkeys("abc", 0) |
len(d), del d[key] | 长度和删除 | del d["old"] |
元组与集合
| 操作 | 示例 → 结果 |
|---|---|
| 元组解包 | x, y = (3, 4) |
| 向集合添加元素 | s.add(5),删除用 s.discard(5) |
| 并集 / 交集 | {1, 2} | {2, 3} → {1, 2, 3}; {1, 2} & {2, 3} → {2} |
| 差集 | {1, 2} - {2} → {1} |
| 列表去重 | list(dict.fromkeys(items)) — 保持原有顺序 |
异常与文件读写
try:
number = int(input("数字: "))
except ValueError as err:
print("这不是数字:", err)
else:
print("成功")
finally:
print("总会执行")
with open("data.txt", "w", encoding="utf-8") as f:
f.write("一行文本\n")
with open("data.txt", encoding="utf-8") as f:
for line in f:
print(line.rstrip())
| 异常 | 何时出现 |
|---|---|
SyntaxError, IndentationError | 语法或缩进错误 |
NameError | 名字未定义(拼写错误) |
TypeError | 对不合适的类型做运算:"1" + 1 |
ValueError | 类型正确但值不对:int("abc") |
IndexError, KeyError | 没有这个索引或键 |
FileNotFoundError | 找不到文件 |
ZeroDivisionError | 除以零 |
类
from dataclasses import dataclass
class Dog:
def __init__(self, name: str):
self.name = name
def bark(self) -> str:
return f"{self.name}: 汪!"
@dataclass
class Point:
x: float
y: float
print(Dog("旺财").bark()) # 旺财: 汪!
print(Point(1, 2)) # Point(x=1, y=2)
Python 常用标准库模块
标准库随解释器一起安装,只要写 import 就能使用。
| 模块 | 用途 | 示例 |
|---|---|---|
math | 数学运算 | math.sqrt(16) → 4.0 |
random | 随机数 | random.randint(1, 6), random.choice(items) |
datetime | 日期和时间 | datetime.date.today() |
pathlib | 路径和文件 | Path("data").glob("*.csv") |
os, sys | 系统、环境变量、命令行参数 | os.environ.get("HOME"), sys.argv |
json | 读写 JSON | json.loads(text), json.dumps(obj, ensure_ascii=False) |
csv | CSV 表格 | csv.DictReader(f) |
collections | Counter、defaultdict、deque | Counter("banana").most_common(1) → [('a', 3)] |
itertools | 组合与串联迭代器 | itertools.chain(a, b) |
re | 正则表达式 | re.findall(r"\d+", s) |
time | 暂停与计时 | time.sleep(1), time.perf_counter() |
asyncio | 异步代码 | asyncio.run(main()) |
Python 3.15 引入了惰性导入(PEP 810):lazy import pandas as pd 会把模块的加载推迟到第一次使用时,因此依赖较重的脚本启动明显更快。
Python 终端常用命令
另一类是启动解释器和安装库的命令。在 Windows 上通常用 python 或 py 代替 python3。
| 命令 | 作用 |
|---|---|
python3 --version | 查看版本 |
python3 | 打开交互式 REPL(用 exit() 退出) |
python3 script.py | 运行文件 |
python3 -c "print(2 + 2)" | 执行一行代码 |
python3 -m venv .venv | 创建虚拟环境 |
source .venv/bin/activate / .venv\Scripts\activate | 激活虚拟环境(Linux、macOS / Windows) |
python3 -m pip install requests | 安装包 |
pip list, pip freeze > requirements.txt | 列出已安装的包并保存 |
pip install -r requirements.txt | 从文件安装依赖 |
python3 -m http.server 8000 | 在当前目录启动简易 Web 服务器 |
uv init, uv add requests, uv run main.py | 用 uv 管理器创建项目、添加依赖并运行 |
新手常见错误
- 用
=做比较 — 条件里要写==,单个=是赋值。 - 忘写冒号 —
if、for、def后面缺少冒号会报SyntaxError。 - 字符串和数字相加:
"年龄: " + 25会报错,应写成f"年龄: {25}"。 - 遍历时修改列表 — 遍历副本
for x in a[:],或者构建一个新列表。 input()返回字符串 — 要做算术运算,先用int()或float()转换。
总结
Python 语法建立在缩进、冒号和少量语法结构之上:条件语句、for 和 while 循环、函数和类。再加上二十来个内置函数以及字符串、列表和字典的方法,就能应对大部分日常任务。收藏这份速查表,等表格里的内容用熟了,再去学习模块和异步编程;这些内容在课程《Python 3.15:从新手到专家》中都有循序渐进的实践讲解。
常见问题
Python 缩进应该用几个空格?
按照 PEP 8 规范,每一级缩进 4 个空格。关键是整个代码块保持一致,不要和 Tab 混用。
列表和元组有什么区别?
列表可变,可以原地添加元素和排序;元组不可变,因此可以作为字典的键,适合存放固定的一组值。
怎样在 Python 里直接查看对象的所有方法?
用 dir(obj) 查看名字列表,用 help(obj) 查看说明,例如 help(str) 会显示字符串的全部方法。
sort() 和 sorted() 有什么区别?
list.sort() 方法对列表本身排序并返回 None,而 sorted() 函数返回一个新列表,并且适用于任何可迭代对象。
Python 语句末尾需要加分号吗?
不需要。分号可以用来在一行里写多条语句,但在常规代码中每条语句单独占一行。
课程“Python 3.15: от новичка до профи”结合实践详细讲解了这一主题。
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15