新手写 Python 代码,如何规范命名、减少 Bug

新手写 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. 写代码前先想"边界情况"

每次写函数前问自己三个问题:

  1. 输入为空怎么办?
  2. 输入类型不对怎么办?
  3. 极端值(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 个习惯

  1. ✅ 变量名用全称,不偷懒
  2. ✅ 函数名用动词,表达动作
  3. ✅ 所有外部输入都要防御
  4. ✅ 一个函数只做一件事
  5. ✅ 写完代码自己读一遍,假装是别人写的

写在最后

写代码不是写日记,不需要"只有自己看得懂"。

好的代码,是写给人类看的,顺便让机器执行。

你不需要一开始就写出完美的代码,

但只要你开始注意命名、边界情况和代码结构,

你已经超过 80% 的纯新手了。

相关推荐
天天被压力1 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #06】Python实时行情总报错?五档盘口+逐笔一次跑通
java·人工智能·python
智能RPA1 小时前
农业与矿业行业智能体自动化平台对比评测(计量与巡检场景)
运维·人工智能·python·自动化·agent·rpa
福兮说1 小时前
JS 正则的六个坑:带 g 的 test() 一真一假、空匹配死循环、replace 里的 $
开发语言·前端·javascript·正则表达式
溪语流沙1 小时前
Django + Vue电商项目第005讲:后端骨架|Django初始化、配置分层与DRF接入
vue.js·后端·python·django
码艺-Alimjan1 小时前
Web 网站打包桌面应用的另一种方式,超级简单(C# exe 33Kb)
开发语言·前端·c#
代码方舟1 小时前
Python数据工程:利用天远全能消金报告优化消费金融合规体验
人工智能·python
沫璃染墨1 小时前
《从零入门Linux系统篇(五十一):线程篇·四——pthread线程库详解:从线程创建到终止与分离》
linux·运维·服务器·开发语言·c++·系统架构·线程
TomEval1 小时前
【测AI】第05篇:Python 爬虫进阶 —— 动态页面爬取与 Scrapy 框架
人工智能·爬虫·python·scrapy·自动化
用户019027581611 小时前
如何用 Python 回测 MACD 金叉死叉策略?(真实收益与频繁交易的代价)
python