新手写 Python 代码,如何规范命名、减少 Bug
很多 Python 新手都会经历这样一个阶段:
代码能跑,但自己过两周看不懂;
改一个地方,炸三个地方;
变量名从
a、b、temp一路用到data2_final_new。
这不是你笨,而是缺少编码规范和防御性编程意识。
好消息是:只要养成几个简单习惯,你的代码质量会立刻提升一个档次。这篇文章专为零基础到入门阶段的 Python 学习者准备。
一、命名规范:让代码自己会说话
1. 变量名:见名知意,拒绝"天书"
❌ 反面教材:
a = 10
lst = [1, 2, 3]
d = {"name": "Tom"}
tmp = get_user()
看代码的人(包括未来的你)会问:
a是什么?年龄?金额?数量?lst里装的是什么?tmp到底临时存了什么?
✅ 正确做法:
user_age = 10
score_list = [1, 2, 3]
user_info = {"name": "Tom"}
current_user = get_user()
📌 命名原则:
宁可名字长一点,也不要让人猜。
2. 函数名:用"动词 + 名词"
函数代表一个动作,所以名字应该像一句话。
❌ 不好:
def user():
...
def process():
...
✅ 推荐:
def get_user():
...
def calculate_total_price():
...
def is_user_logged_in():
...
📌 约定俗成:
- 返回布尔值:
is_、has_、can_开头 - 获取数据:
get_开头 - 修改数据:
set_、update_开头
3. 类名:大驼峰(PascalCase)
class dog: # ❌
pass
class Dog: # ✅
pass
class UserService: # ✅
pass
📌 规则:
- 每个单词首字母大写
- 不使用下划线
4. 常量:全大写 + 下划线
max_retry = 3 # ❌
MAX_RETRY = 3 # ✅
default_timeout = 10 # ❌
DEFAULT_TIMEOUT = 10 # ✅
5. 避免"误导型命名"
user_list = {"name": "Tom"} # ❌ 明明是 dict
user_dict = ["Tom", "Lucy"] # ❌ 明明是 list
📌 命名要反映真实类型。
二、减少 Bug 的 6 个核心习惯
1. 永远不要直接写"裸奔"的代码
❌ 新手常见:
num = int(input("请输入数字:"))
print(10 / num)
一旦用户:
- 输入
0 - 输入
abc
程序直接崩溃。
✅ 加上防御:
try:
num = int(input("请输入数字:"))
print(10 / num)
except ValueError:
print("输入的不是数字")
except ZeroDivisionError:
print("不能输入 0")
📌 原则:
只要涉及用户输入、文件、网络、数据库,就要想:会不会出错?
2. 不要写"魔法数字"
❌ 坏味道:
if user.age > 18:
...
为什么是 18?哪天改成 16 怎么办?
✅ 用常量:
ADULT_AGE = 18
if user.age > ADULT_AGE:
...
3. 一个函数只做一件事
❌ 反例:
def process_user():
# 读取文件
# 解析数据
# 写数据库
# 发邮件
pass
✅ 拆分:
def read_user_file():
...
def parse_user_data():
...
def save_user():
...
def send_welcome_email():
...
📌 好处:
- 容易测试
- 容易复用
- 出错容易定位
4. 不要修改全局变量
❌ 危险:
total = 0
def add(n):
total += n
✅ 通过参数和返回值:
def add(total, n):
return total + n
📌 全局变量是 Bug 温床。
5. 多用断言和类型提示(进阶但推荐)
def divide(a: float, b: float) -> float:
assert b != 0, "除数不能为 0"
return a / b
Python 3.5+ 支持类型提示,配合 mypy 能在运行前发现大量错误。
6. 写代码前先想"边界情况"
每次写函数前问自己三个问题:
- 输入为空怎么办?
- 输入类型不对怎么办?
- 极端值(0、负数、超长字符串)怎么办?
养成这个习惯,Bug 数量直接砍半。
三、PEP 8:Python 官方编码规范速览
Python 有一份官方规范叫 PEP 8,新手记住这几点就够:
| 项目 | 规范 |
|---|---|
| 缩进 | 4 个空格 |
| 每行长度 | ≤ 79 字符 |
| 运算符两边加空格 | a = 1 + 2 |
| 逗号后加空格 | [1, 2, 3] |
| 函数之间空两行 | ✅ |
| 类里面方法之间空一行 | ✅ |
📌 推荐工具:
- VS Code 自动格式化
black(一键格式化神器)flake8(代码检查)
四、一个"规范 vs 不规范"的对比示例
❌ 不规范版本
def p(l):
r = 0
for i in l:
if i > 0:
r += i
return r
a = [1, -2, 3]
print(p(a))
✅ 规范版本
def calculate_positive_sum(number_list):
total = 0
for number in number_list:
if number > 0:
total += number
return total
scores = [1, -2, 3]
result = calculate_positive_sum(scores)
print(result)
功能完全一样,但后者:
- 能看懂
- 能维护
- 能协作
五、总结:新手最容易落地的 5 个习惯
- ✅ 变量名用全称,不偷懒
- ✅ 函数名用动词,表达动作
- ✅ 所有外部输入都要防御
- ✅ 一个函数只做一件事
- ✅ 写完代码自己读一遍,假装是别人写的
写在最后
写代码不是写日记,不需要"只有自己看得懂"。
好的代码,是写给人类看的,顺便让机器执行。
你不需要一开始就写出完美的代码,
但只要你开始注意命名、边界情况和代码结构,
你已经超过 80% 的纯新手了。