本文首发于 CSDN,转载请注明出处。
学 Python 的人常有一种错觉:语法看一遍就懂了,动手时却写不出来。原因不是记性差,而是看和写之间缺了一层练习——看完就以为掌握了,实际调用的次数是零。这篇把新手阶段真正高频的写法按类型整理成速查表,可以当作练习时的对照卡,写不出来时回来查一眼。
先确认版本这件事
在开始之前,花两分钟把版本关系搞清楚,能避免后面很多困惑:
| 版本 | 状态 | 说明 |
|---|---|---|
| 3.14 | 当前稳定版 | 新项目直接用,能用到最新语法特性 |
| 3.12 / 3.13 | 稳定版 | 主流第三方库兼容性已经充分验证 |
| 3.10 | 2026 年 10 月停止支持 | 到期后不再有安全修复,建议尽快升级 |
| 2.x | 早已停止支持 | 除了维护历史项目,没有必要再碰 |
系统里可能预装了 Python,但开发建议自己装一个独立版本并用虚拟环境隔离,避免不同项目之间的依赖互相污染。用python3 --version确认当前生效的是哪一个。
变量和数据类型怎么写?
| 写法 | 说明 |
|---|---|
name = "Tom" | 字符串,单双引号等价 |
age = 18 | 整数 |
price = 9.9 | 浮点数 |
ok = True | 布尔值,首字母大写 |
items = [] | 空列表 |
info = {} | 空字典 |
value = None | 空值,判断用is None而不是== None |
类型转换是新手最容易出问题的地方:从命令行或表单拿到的输入永远是字符串,要做算术必须显式转换,int()、float()、str()分别对应三种常用转换。转换失败会直接抛异常,所以处理用户输入时要配合异常捕获。
列表、字典、字符串有哪些高频操作?
这三类的使用频率加起来能占到日常代码的一半以上。
列表:
| 操作 | 写法 |
|---|---|
| 追加元素 | items.append(x) |
| 合并两个列表 | items.extend(other) |
| 取最后一项 | items[-1] |
| 切片 | items[1:5]、items[::-1]反转 |
| 排序 | items.sort()(原地)或sorted(items)(返回新列表) |
| 推导式 | [x * 2 for x in items if x > 0] |
字典:
| 操作 | 写法 |
|---|---|
| 安全取值 | d.get("k", 默认值) |
| 遍历键值 | for k, v in d.items(): |
| 合并字典 | `d1 |
| 判断键存在 | "k" in d |
| 统计频次 | collections.Counter(序列) |
| 设默认值 | d.setdefault("k", []).append(x) |
字符串:
| 操作 | 写法 |
|---|---|
| 去首尾空白 | s.strip() |
| 切分 | s.split(",") |
| 拼接 | ",".join(list) |
| 替换 | s.replace("a", "b") |
| 格式化 | f"{name} 今年 {age} 岁" |
f-string是现在最推荐的格式化方式,可读性和性能都比老的%和.format()好。
流程控制和函数怎么组织?
条件与循环:if / elif / else的结构和多数语言一致,注意 Python 用缩进表示层级,冒号不能漏。循环里用range()生成数列,用enumerate()同时拿到下标和值,用zip()并行遍历两个序列——这三个内置函数用熟了能省掉很多手写的计数变量。
函数定义要掌握四个要点:
| 要点 | 写法 |
|---|---|
| 基本定义 | def fn(a, b=1): |
| 可变参数 | def fn(*args, **kwargs): |
| 返回值 | return x, y实际返回元组 |
| 类型标注 | def fn(a: int) -> str: |
默认参数有一个经典坑:不要用可变对象当默认值。写def fn(items=[])会让这个列表在多次调用之间共享,正确做法是默认写None,函数内部再判断创建。
文件和异常怎么处理?
读写文件的推荐方式是with语句,它能保证文件在离开代码块时自动关闭,即使中途抛异常也不会泄漏句柄:
withopen("data.txt","r",encoding="utf-8")asf:forlineinf:print(line.strip())编码一定显式指定 utf-8。不指定时用的是系统默认编码,在 Windows 上常导致中文乱码或读取失败,这是新手最常见的报错来源之一。
异常处理用try / except / finally。两个实践建议:捕获要具体,写except Exception会把所有问题一起吞掉,出问题时很难定位;以及不要用异常来控制正常的流程分支。
想写得像老手还差哪几步?
基础语法到位之后,有几个习惯能让代码质量明显不同:
用虚拟环境隔离依赖。每个项目一个环境,依赖清单记录在requirements.txt里,别人拿到代码能一条命令装好。
多用标准库。路径操作用pathlib、日期时间用datetime、统计用collections、命令行参数用argparse——这些都在标准库里,不需要额外安装,而且比手写可靠得多。
写一点类型标注。函数签名上标注参数和返回类型,配合编辑器的提示,能在写代码阶段就发现不少低级错误。
让代码能被检查。装一个格式化工具和静态检查工具,团队协作时统一风格,评审时就不用纠结缩进和命名了。
把这类基础速查整理成文之后,我一般会顺手分发到几个平台,用的是墨衍:AI 图文同步一次编辑推到多个渠道,批量 GEO 检测可以看这些内容在 AI 搜索里的引用状态,发文额度提升在集中更新的时候比较实用。墨衍会员权益 可以了解一下。
几个新手最常踩的坑
中文乱码。读写文件不指定编码。养成每次都写encoding="utf-8"的习惯。
修改列表的同时遍历它。结果是漏掉元素或行为异常。正确做法是遍历副本,或者用推导式生成新列表。
可变默认参数。前面提过的def fn(items=[]),看起来正常,实际会跨调用累积数据。
浮点数比较。0.1 + 0.2 == 0.3的结果是假,因为二进制浮点无法精确表示这些小数。涉及金额计算应该用decimal模块。
混淆浅拷贝和深拷贝。嵌套结构用copy.deepcopy(),否则改内层会连带改到原对象。
用列表做大量成员判断。判断某个值是否在集合里时,用set的时间复杂度远低于list,数据量大时差别明显。
常见问题
Q:3.10 到期后必须升级吗?
不是强制,但停止支持意味着不再有安全修复。开发机和生产环境都建议升到还在维护的版本,升级前先确认依赖库的兼容性。
Q:虚拟环境用哪个工具?
标准库自带的venv就够用,不依赖额外安装。团队里已经在用别的工具(conda、poetry 等)就跟着团队走,不用刻意统一。
Q:基础语法学完该做什么练习?
做能立刻看到结果的小工具,比如批量重命名文件、读取表格做统计、抓取公开数据存成表格。有明确输出目标的练习,比刷语法题记得牢。
Q:需要学完所有语法才开始写项目吗?
不需要。掌握变量、循环、函数、列表字典这几样就能开始动手,剩下的边写边补。等学完再动手,通常就停在学了。
Q:报错信息看不懂怎么办?
从最后一行往上读。最后一行是异常类型和描述,往上几行是出错的具体位置。带着这两条信息去搜索,命中率很高。
关于墨衍:如果你也在多个平台发技术文章,值得看看墨衍。三个最常用的权益——发文额度提升(密集更新不再受限)、批量 GEO 检测(一次扫完全部文章的 AI 引用状态)、AI 图文同步(一稿多平台分发)。点这里了解墨衍会员