Python之变量命名规则详解

2025-09-28 01:50

本文主要是介绍Python之变量命名规则详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护...

python 编程中,变量命名看似是 “小事”,却直接影响代码的可读性、可维护性,甚至团队协作效率。

糟糕的命名会让后续调试、迭代变得举步维艰 —&mdpythonash; 想想看,当你接手一个包含a1str_1func_x这类变量的项目时,是不是要花大量时间猜测它们的用途?

这篇文章将从 “基础规则” 到 “进阶规范”,结合 “三要三不要” 原则,避开常见坑。

1. 硬性规则

在谈 “规范” 之前,必须先明确 Python 语法层面的 “强制要求”—— 违反这些规则,代码会直接报错,根本无法运行。

只能包含字母、数字和下划线变量名的第一个字符必须是字母(a-z, A-Z)或php下划线(_),不能以数字开头。

  • ✅ 合法:user_nameage_18_total_score
  • ❌ 非法:18_age(以数字开头)、user-name(包含连字符)、user@name(包含特殊符号)

区分大小写Python 对大小写敏感,Useruser是两个完全不同的变量。示例:

user = "Lyle"
User = "Tom"

print(user)  # 输出:Lyle
print(User)  # 输出:Tom

不能使用关键字 / 保留字关键字是 Python 内置的、有特殊含义的单词(如ifforclass等),不能作为变量名。如何查看所有关键字?可以用以下代码:

import keyword

print(keyword.kwlist)
print(len(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
35

❌ 错误示例:if = 10if是关键字)、class = "学生"class是关键字)

2. “三要” 原则

语法规则保证代码能运行,而 &http://www.chinasem.cnldquo;三要” 原则则保证代码 “好读、好维护”。核心思路是:让变量名 “自解释”,减少注释依赖

2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”

如果一个变量名只能告诉你 “它是个字符串” 或 “它是个数字”,却无法说明 “它存的是什么内容”,那就是无效命名。

❌ 反面示例:str_1num_1分别存的是什么?—— 需要猜!

str_1 = "zhangsan@example.com"
num_1 = 25

print(f"用户信息:{str_1}, {num_1}")

✅ 正面示例:一看就知道存的是“用户邮箱”和“用户年龄”

user_email = "zhangsan@example.com"
user_age = 25

print(f"用户信息:{user_email}, {user_age}")

2.2. 要让变量名 “自解释”,减少注释依赖

如果一个变量需要额外加注释才能说明用途,说明命名效率极低 —— 工程变大后,变量可能出现在多个文件中,注释容易遗漏或过时,导致可读性骤降。

❌ 反面示例(依赖注释):

# 注释:这个变量存的是用户是否已实名认证(True=已认证,False=未认证)
user_flag: bool = True  # 问题:flag太泛,没有说明“什么flag”

✅ 正面示例(自解释,无需注释):

# 优点:变量名直接说明“用户是否已实名认证”,无需额外注释
user_is_certified: bool = True

2.3. 函数命名要 “明确功能”,不要怕 “长”

函数名的核心是 “说明它做什么”,而不是 “它是什么类型”。很多新手怕函数名太长,用func1do_something这类泛泛的名字,反而增加理解成本 ——清晰比简短更重要

❌ 反面示例:

# 问题:func1做什么?需要读函数内部代码才知道
def func1(data):
    return [x for x in data if x > 60]

# 调用时一脸懵:传什么data?返回什么结果?
result = func1([85, 40, 72, 58])

✅ 正面示例:

# 优点:函数名直接说明“筛选列表中大于60的元素”
def filter_scores_above_60(scores):
    return [score for score in scores if score > 60]

# 调用时一目了然:传“分数列表”,得“及格分数”
passed_scores = filter_scores_above_60([85, 40, 72, 58])
print(passed_scores)  # 输出:[85, 72]

3. “三android不要” 原则(⚠️避坑指南)

除了 “要做什么”,更要明确 “不要做什么”—— 这些细节容易被忽略,却会让代码变得混乱。

3.1. 不要 “自造缩写”

缩写的目的是简化命名,而不是制造 “密码”。如果你的缩写只有自己能懂,团队其他人需要花时间猜测,就失去了意义。必须使用行业或 Python 社区通用的缩写

❌ 反面示例(自造缩写):

# 问题:nm和thrs是什么?第一次接触代码的成员可能看不懂

nm: str = 'Lyle'
thrs: float = 30.0  # 自造:thrs=threshold
pwd = "123456"   # 自造:pwd=password(虽常见,但建议写全password更清晰)

✅ 正面示例(通用缩写):

# 通用缩写:id(identity)、url(Uniform Resource Locator)、http(HyperText Transfer Protocol)

user_id: str = "1001"
user_password: str = "123456"  # 密码建议写全,避免歧义
config_path: str = "config.ini"

# 复杂场景可用通用缩写(如API、SDK)
api_key: str = "abc123def456"
sdk_version: str = "3.8.0"

3.2. 不要忽略 “英文语法”,注意单复数、动名词

变量名的语法错误会传递错误信息 —— 比如用单数表示 “多个元素”,用名词表示 “一个动作”,都会误导。

❌ 反面示例(语法错误):

# 问题1:user存的是列表(多个用户),却用单数
user = ["Lyle", "Tom", "Jerry"]
print(f"用户数量:{len(user)}")  # 逻辑上没问题,但语法误导

# 问题2:get_user是“获取用户”的动作,却用来存“用户信息”(名词)
get_user = "Tony"

# 问题3:calculate_total是动词短语,却用来存“结果”(名词)
calculate_total = 1500  # 实际是“总金额”

✅ 正面示例(语法正确):

# 规则1:单数表“单个”,复数表“多个”
users = ["Lyle", "Tom", "Jerry"]  # 列表用复数
print(f"用户数量:{len(users)}")

# 规则2:变量用“名词”,函数用“动词/动名词”(表动作)
user_info = "Tony"  # 变量:名词(用户信息)
total_amount = 1500  # 变量:名词(总金额)

# 规则3:函数用“动词开头”(如get_、filter_、calculate_)表动作
def get_user_info(user_id):  # 函数:动词(获取用户信息)
    return f"用户ID {user_id} 的信息"

3.3. 不要 “滥用下划线”,避免过长或冗余

下划线是 Python 推荐的 “蛇形命名法”(snake_case)的核心,但不是越多越好。冗余的下划线会让变量名变长,反而降低可读性。

❌ 反面示例(滥用下划线):

# 问题1:冗余的“_of”“_for”,可简化
user_name_of_student = "Lyle"  # 简化为 student_name
score_list_for_math = [90, 85, 92]  # 简化为 math_scores

# 问题2:无意义的前缀,增加长度
var_user_age = 20  # 前缀var_毫无意义,直接用user_age
data_order_total = 300  # 前缀data_冗余,直接用order_total

✅ 正面示例(简洁合理):

student_name = "Lyle"
math_scores = [90, 85, 92]
user_age = 20
order_total = 300

4. QA

4.1. 变量名用 “蛇形命名法” 还是 “驼峰命名法”?

Python 官方推荐蛇形命名法(snake_case,全小写 + 下划线分隔),适用于变量、函数、模块;而驼峰命名法(CamelCase,首字母大写)主要用于类名(如UserInfoStudentScore)。

示例:

# 蛇形命名法(变量、函数)
user_address = "北京市朝阳区"
def calculate_discount(price):
    return price * 0.8

# 驼峰命名法(类名)
class UserInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

4.2. 什么时候用 “单下划线开头” 的变量(如_user_name)?

这是 Python 的 “约定俗成”,表示该变量是 “内部变量”,不建议外部直接访问(类似其他语言的 “私有变量”)。虽然语法上不强制限制,但能提醒其他开发者 “不要随便修改”。

示例:

class Student:
    def __init__(self, name, score):
        self.name = name  # 公开变量,外部可访问
        self._score = score  # 内部变量,建议外部通过方法访问
    
    # 外部通过这个方法获取分数,而不是直接访问_score
http://www.chinasem.cn    def get_score(self):
        return self._score

4.3. 变量名太长怎么办?

比如有一个变量的名称为calculate_monthly_user_payment_total

首先,“长” 不是问题,“不清晰” 才是问题。如果确实过长,可以通过以下方式优化

  1. 检查是否有冗余词(如calculate可简化为calc,但需团队认可);
  2. 拆分逻辑(比如将复杂计算拆成多个小函数,变量名自然简化)。示例优化:

Tip:Apple公司的变量名和函数名都非常长,但却得到很多人的认可

# 原长变量名
calculate_monthly_user_payment_total = 5000

# 优化:拆分逻辑,变量名更简洁
def calc_user_payment(monthly_fee):
    return monthly_fee * 12  # 假设年付是月付的12倍

user_yearly_payment = calc_user_payment(5000)  # 简化为“用户年付款”

4.4. 可以用中文作为变量名吗?

考虑到代码的一致性,不推荐使用中文命名,但如有必要也可以使用中文进行命名

5. 总结

最后,用一句话总结 Python 变量命名的核心:让变量名像 “说明书” 一样清晰,让别人(包括 3 个月后的你)看一眼就知道它的用途

记住三个核心点:

  1. 先遵守 “硬性规则”(字母 / 数字 / 下划线、区分大小写、不碰关键字);
  2. 再践行 “三要”(体现作用、自解释、函数名明确);
  3. 避开 “三不要”(不造缩写、不忽略语法、不滥用下划线)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于Python之变量命名规则详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156059

相关文章

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用