

恭喜你完成了前八篇的学习,并成功开发了自己的 To-Do List 应用!此时的你,已经具备了扎实的 Python 基础和初步的工程能力。但要写出专业、可维护、高效 的代码,还需要掌握一些"软技能":编码规范、调试方法、性能意识。
本篇将带你从"能跑就行"迈向"写得漂亮",涵盖:
- PEP 8 代码风格指南
- 使用
print、logging和调试器(Debugger) - 简单性能分析与优化建议
- 编写清晰注释与文档字符串(docstring)
这些内容虽不涉及新语法,却是区分新手与专业开发者的关键!
1. 代码规范:遵循 PEP 8
PEP 8 是 Python 官方推荐的代码风格指南。遵循它,你的代码将更易读、更统一,也更容易被他人接受(尤其在团队协作中)。
✅ 核心规则速览
| 类别 | 规范示例 |
|---|---|
| 缩进 | 用 4 个空格(不要用 Tab) |
| 行长度 | 每行不超过 79 字符(或 88,视团队而定) |
| 空行 | 函数/类之间用 2 个空行;方法之间用 1 个空行 |
| 命名规范 | * 变量/函数:snake_case(如 get_user_name) * 类名:PascalCase(如 TodoApp) * 常量:UPPER_SNAKE_CASE(如 MAX_RETRY) |
| 空格 | 逗号后、运算符两侧加空格: a = [1, 2, 3],x = a + b |
❌ 反面例子 vs ✅ 正确写法
python
# ❌ 不规范
def GetUser(name,age):
if age<18:
return name+" is minor"
else:
return name+" is adult"
# ✅ 规范
def get_user_status(name, age):
"""返回用户年龄状态"""
if age < 18:
return f"{name} is minor"
else:
return f"{ name } is adult"
💡 工具推荐:
- VS Code / PyCharm :自动格式化(快捷键
Shift+Alt+F或Ctrl+Alt+L)black:代码自动格式化工具(pip install black→black todo.py)flake8:检查 PEP 8 合规性(pip install flake8→flake8 todo.py)
2. 调试技巧:让 Bug 无处遁形
程序出错是常态。关键是如何快速定位并修复。
方法一:print() 调试(最简单)
在可疑位置插入 print 输出变量值:
python
def calculate_total(items):
total = 0
for item in items:
print("当前商品:", item) # 调试用
total += item["price"]
return total
⚠️ 上线前记得删除或注释掉
方法二:使用 logging 模块(推荐)
比 print 更专业,可分级、可开关、可输出到文件。
python
import logging
# 配置日志
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def divide(a, b):
logging.debug(f"执行除法: {a} / {b}")
if b == 0:
logging.error("除数不能为零!")
raise ValueError("b cannot be zero")
return a / b
# 测试
try:
result = divide(10, 0)
except ValueError:
logging.info("已捕获异常,程序继续运行")
日志级别(从低到高):
DEBUG:详细信息,通常只在诊断问题时使用INFO:确认程序按预期工作WARNING:意外情况,但程序仍正常运行ERROR:严重问题,部分功能失败CRITICAL:非常严重的错误,程序可能无法继续
方法三:使用调试器(Debugger)
在 IDE(如 VS Code、PyCharm)中设置断点(Breakpoint),逐行执行并查看变量。
VS Code 调试步骤:
- 在代码行号左侧点击,设置断点(出现红点)
- 按
F5启动调试 - 程序会在断点处暂停
- 查看左侧"变量"面板,观察当前状态
- 使用
Step Over(F10)、Step Into(F11)等按钮控制执行
🎯 调试器是解决复杂逻辑 Bug 的终极武器!
3. 性能初探:别让程序"慢如蜗牛"
虽然 Python 不是最快的,但合理编写也能避免明显卡顿。
常见性能陷阱与优化
❌ 陷阱 1:在循环中重复计算不变量
python
# 慢
data = list(range(100000))
for i in range(len(data)): # 每次都调用 len()
process(data[i])
✅ 优化:
python
n = len(data) # 提前计算
for i in range(n):
process(data[i])
# 或更 Pythonic:
for item in data:
process(item)
❌ 陷阱 2:字符串拼接用 +(大量时)
python
# 慢(O(n²))
result = ""
for word in words:
result += word # 每次创建新字符串
✅ 优化:
python
# 快(O(n))
result = "".join(words)
❌ 陷阱 3:频繁查找列表元素
python
# 慢(O(n))
if user_id in user_list: # 列表查找很慢
...
✅ 优化(用集合):
python
user_set = set(user_list) # O(1) 查找
if user_id in user_set:
...
使用 timeit 简单测速
python
import timeit
code1 = '''
s = ""
for i in range(1000):
s += str(i)
'''
code2 = '''
s = "".join(str(i) for i in range(1000))
'''
t1 = timeit.timeit(code1, number=1000)
t2 = timeit.timeit(code2, number=1000)
print(f"方法1耗时: {t1:.4f}s")
print(f"方法2耗时: {t2:.4f}s") # 通常快很多!
🔍 原则:先写清晰代码,再优化瓶颈。不要过早优化!
4. 编写好注释与文档字符串(docstring)
注释原则:
- 解释"为什么",而不是"做什么"
- 避免无意义注释(如
i += 1 # i 加 1)
python
# ❌ 无意义
x = x * 2 # multiply x by 2
# ✅ 有意义
x = x * 2 # 补偿传感器信号衰减
文档字符串(docstring)
用 """ 为模块、类、函数写说明,支持自动生成文档。
python
def load_tasks(filepath="tasks.json"):
"""
从 JSON 文件加载待办任务列表。
Args:
filepath (str): 任务文件路径,默认为 'tasks.json'
Returns:
list: 包含任务字典的列表,每个任务含 'id', 'content', 'done'
Raises:
IOError: 当文件无法读取时
"""
# ... 实现代码
💡 工具如
Sphinx或 VS Code 悬停提示都能识别 docstring。
5. 综合建议:写出"好代码"
| 原则 | 说明 |
|---|---|
| 可读性 > 聪明技巧 | 宁可多写两行,也要让别人看懂 |
| 函数职责单一 | 一个函数只做一件事 |
| 避免魔法数字/字符串 | 用常量代替 if status == 2: → if status == STATUS_COMPLETED: |
| 尽早返回(Early Return) | 减少嵌套层级 |
| 测试你的代码 | 手动测试 or 写简单 assert |
结语
本篇虽无新语法,却是成为优秀 Python 开发者的必经之路。记住:
"代码是写给人看的,只是顺便让机器执行。"
------《代码大全》
从今天起:
- 用
black自动格式化代码 - 用
logging替代print - 给重要函数写 docstring
- 遇到 Bug 先用调试器
你写的每一行代码,都在塑造你的编程风格。坚持下去,你会感谢现在认真对待细节的自己!
📌 系列完结说明:
《【Python】基础语法入门》共九篇,至此圆满结束!
下一步,建议你:
- 复习并重做所有小项目
- 学习 Git 版本控制
- 尝试 Web 开发(Flask)或数据分析(Pandas)方向
编程之路,永无止境。愿你保持好奇,持续前行!🐍

