python变量命名须避关键字和内置名,优先snake_case,常量用upper_snake_case,私有变量加单下划线,避免缩写,布尔变量加is_/has_/can_前缀,长名不影响性能但损可读性。

变量名不能用 class、def 这类关键字
Python 解释器看到 class 就准备定义类,你拿来当变量名,直接报 SyntaxError: invalid syntax。这不是风格问题,是语法死区。
常见踩坑点:list、dict、str 这些内置类型名也别乱覆盖——虽然不会报错,但之后调 list() 会出 TypeError: 'list' object is not callable。
- 用
import keyword; print(keyword.kwlist)查当前所有关键字 - 用
dir(__builtins__) + ['list', 'dict', 'str', 'int', 'float']快速扫一遍常用内置名(注意别真 import) - IDE 一般会高亮关键字和内置名,别忽略这个提示
snake_case 是唯一被 PEP 8 明确推荐的变量命名方式
PEP 8 没说 “必须”,但所有官方文档、标准库、主流框架都用 snake_case。你写 camelCase 或 PascalCase,别人第一反应是“这该不会是个类或函数吧?”
实际影响不止于可读性:很多静态检查工具(如 pylint、flake8)默认就报 C0103(invalid-name)警告;自动补全也依赖命名惯例,user_name 比 userName 更容易被 IDE 精准识别为变量。
立即学习“Python免费学习笔记(深入)”;
- 常量用
UPPER_SNAKE_CASE(如MAX_RETRY),但仅限模块级不可变值 - 私有变量加单下划线前缀,如
_internal_flag;双下划线(__private)触发名称改写,慎用 - 避免缩写,
user_profile_data比upd清晰,哪怕多敲几个字母
下划线开头/结尾的变量名有明确语义,不是装饰
_single_leading_underscore 表示“内部使用”,不参与 from module import *;single_trailing_underscore_ 是为避免和关键字冲突(如 class_);__double_leading_underscore 触发名称改写(_ClassName__attr);__double_underscores__ 是魔法方法专用,自己别造。
混用会破坏预期行为。比如把 __version__ 写成 _version_,一些包管理工具(如 setuptools)就识别不到版本号。
- 想表达“暂未实现”,用
_TODO或_FIXME,别用__todo__ - 测试函数名用
test_*,不是__test__——后者会被 pytest 当作魔法方法跳过 -
__all__ = ['public_func']控制模块公开接口,漏写或写错会导致导入失败
长变量名在性能上没代价,但可读性崩塌比你想象得快
Python 编译时就把变量名存进符号表,运行时不解析字符串,所以 user_authentication_token_expiration_timestamp_in_seconds 和 token_exp 执行速度完全一样。
真正的问题是:你在 300 行函数里反复看到一长串名字,大脑会自动截断、模糊匹配,最后搞不清 api_response_data_parsed 和 api_response_data_raw 哪个才是刚处理过的。
- 优先用上下文压缩长度:在
User类里,直接叫name,不用user_name - 布尔变量加
is_/has_/can_前缀(is_active),这是约定俗成的信号 - 循环变量别吝啬:用
for user in users:,而不是for u in users:——少敲两个字母,多花三秒理解









