新手写 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% 的纯新手了。

相关推荐
xiaogai_gai2 分钟前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
benchmark_cc28 分钟前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
吹什么轩38 分钟前
linux系统复习:僵尸进程与孤儿进程
linux·运维·php
const_qiu41 分钟前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
专注仿真1 小时前
ThinkPHP6 API接口开发实例:从零搭建RESTful风格接口
后端·php·restful
CoderYanger1 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
估值探索者1 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻2 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习
Dmz丶2 小时前
前端转 AI 100 天 Day 27:Docker 容器化——从“我电脑能跑“到“到处能跑“
python