缩进
Python 用缩进表示代码层级,常用 4 个空格。同一层级必须一致,冒号 : 后面通常要跟缩进块。
这一页只记 Python 开发里最常用、最容易影响项目理解的语法点。目标不是背完整语法手册,而是能看懂脚本怎么运行,知道数据怎么流动,遇到常见报错能快速定位。
缩进
Python 用缩进表示代码层级,常用 4 个空格。同一层级必须一致,冒号 : 后面通常要跟缩进块。
注释
# 写单行注释;文档字符串 """...""" 用来说明模块、函数或类,可被 help() 读取。
变量命名
变量不用提前声明类型,赋值时绑定对象。命名推荐 snake_case,不要用关键字。
类型转换
input() 得到的一定是字符串,需要数字时要用 int()、float() 显式转换。
x = 5
if x > 0: print("正数") print("仍在 if 块中")
print("离开 if 块")最常见的基础类型:
| 类型 | 含义 | 示例 |
|---|---|---|
int |
整数 | 18 |
float |
浮点数 | 1.75 |
str |
字符串 | "hello" |
bool |
布尔值 | True / False |
None |
空值 | None |
| 类型 | 常用写法 | 记忆点 |
|---|---|---|
| 算术 | + - * / // % ** |
/ 得到浮点;// 整除;% 取余;** 幂 |
| 比较 | == != > < >= <= |
Python 支持链式比较:80 <= score < 90 |
| 逻辑 | and or not |
支持短路求值:a or "默认值" |
| 成员 | in / not in |
判断元素是否存在 |
| 身份 | is / is not |
判断是否同一个对象,常用于 None |
score = 88print(80 <= score < 90)
x = Noneif x is None: print("x 为空")score = 88
if score >= 90: print("优秀")elif 80 <= score < 90: print("良好")elif 60 <= score < 80: print("及格")else: print("不及格")elif 必须跟在 if 后面,else 可选。
cmd = "start"
match cmd: case "start": print("启动") case "stop": print("停止") case _: print("未知命令")match / case 适合命令分发、状态判断和结构化数据匹配,要求 Python 3.10+。
for i in range(1, 5): print(i) # 1,2,3,4
user = {"name": "Tom", "age": 18}for k, v in user.items(): print(k, v)range 左闭右开;遍历字典时 items() 最常用。
count = 0while count < 3: print(count) count += 1while 适合次数不确定的循环,必须更新条件,避免死循环。
循环控制:
| 关键字 | 作用 |
|---|---|
break |
立刻终止整个循环 |
continue |
跳过本轮,进入下一轮 |
pass |
占位,语法需要但暂时不写逻辑 |
推导式适合用一行生成新数据结构。转换或过滤逻辑很简单时用它;逻辑一复杂,就改回普通循环,代码更容易读。
squares = [i * i for i in range(1, 6)]evens = [i for i in range(1, 11) if i % 2 == 0]
square_map = {i: i * i for i in range(1, 4)}even_set = {i for i in range(10) if i % 2 == 0}| 结构 | 特点 | 常用场景 |
|---|---|---|
str |
字符串,不可变 | 文本处理、接口字段、提示词 |
list |
有序、可变 | 存一组数据,最常用容器 |
tuple |
有序、不可变 | 坐标、固定配置、可作为字典 key |
dict |
键值对映射 | JSON、接口数据、对象属性 |
set |
无序、去重 | 去重、交集、并集、差集 |
raw = " a,b,c "parts = raw.strip().split(",")
print("-".join(parts))print("hello".replace("l", "L"))字符串不可变,replace() 会返回新字符串,不会修改原字符串。
nums = [3, 1, 2]nums.append(4)nums.sort()
print(nums)print(sorted(nums))sort() 和 reverse() 修改原列表并返回 None;sorted() 返回新列表。
user = {"name": "Tom", "age": 18}
print(user.get("score", 0))user["score"] = 95
for k, v in user.items(): print(k, v)访问不确定存在的键时,优先用 get(key, default)。
s1 = {1, 2, 3}s2 = {3, 4, 5}
print(s1 & s2)print(s1 | s2)print(s1 - s2)集合适合去重和集合运算。
函数
函数用来封装可复用代码。常见参数顺序是:位置参数 → 默认参数 → *args → **kwargs。
模块
一个 .py 文件就是一个模块。常见导入方式:import math、import math as m、from math import sqrt。
包
包是组织多个模块的目录,通常包含 __init__.py,适合管理中大型项目代码。
def add(a, b=0): """返回 a+b""" return a + b
def main(): print(add(1, 2))
if __name__ == "__main__": main()if __name__ == "__main__" 的作用:只有文件被直接运行时才执行入口;被别的文件 import 时不会自动执行,避免导入副作用。
包结构示例:
project/├─ main.py└─ mypkg/ ├─ __init__.py ├─ calc.py └─ utils.py导入和运行建议:
from mypkg.calc import addpython -m mypkg.calc推荐在项目根目录用 python -m ... 运行模块,这样更不容易遇到导入路径问题。
| 能力 | 写法 | 重点 |
|---|---|---|
| 输出 | print("a", "b", sep="-") |
sep 控制分隔符,end 控制结尾 |
| 输入 | input("请输入:") |
永远返回字符串,需要手动转换 |
| 文件读取 | with open(..., "r", encoding="utf-8") |
推荐 with + encoding |
| 文件写入 | with open(..., "w", encoding="utf-8") |
"w" 覆盖写,"a" 追加写 |
with open("test.txt", "w", encoding="utf-8") as f: f.write("第一行\n")
with open("test.txt", "r", encoding="utf-8") as f: content = f.read() print(content)异常处理的目的不是把错误藏起来,而是让程序“可控地失败”。输入转换、文件读取、接口调用这类不稳定场景,都应该考虑异常处理。
try: x = int("12x")except ValueError as e: print("转换失败:", e)else: print("没有异常才会执行")finally: print("无论如何都会执行")常见异常:
| 异常 | 常见原因 |
|---|---|
ZeroDivisionError |
除数为 0 |
IndexError |
列表索引越界 |
KeyError |
字典键不存在 |
TypeError |
类型不匹配 |
ValueError |
值不合法,常见于类型转换 |
FileNotFoundError |
文件不存在 |
主动抛出异常:
def withdraw(balance, amount): if amount < 0: raise ValueError("amount 不能为负数") if amount > balance: raise ValueError("余额不足") return balance - amount| 报错 | 常见原因 | 处理方式 |
|---|---|---|
IndentationError |
缩进不一致、冒号后缺代码块、Tab/空格混用 | 统一 4 空格,显示空白字符 |
ModuleNotFoundError |
运行目录不对、模块名拼错、包结构不对 | 在项目根目录运行,必要时用 python -m ... |
ValueError |
int("abc") 这类值不合法 |
输入校验,使用 try/except |
IndexError / KeyError |
索引越界或键不存在 | 用 len()、dict.get()、key in dict |
TypeError |
类型不匹配,比如 "1" + 2 |
做类型转换,检查变量是否为 None |