Python变量本质、命名规则与常量写法(破除新手认知误区)
博客摘要
90%新手都误解了Python变量:变量不是装数据的盒子,只是贴在内存上的标签。本文从内存底层拆解变量赋值逻辑,区分硬性命名红线与PEP8规范,补齐Python无原生常量的替代写法,覆盖面试高频考点。
一、变量底层本质:引用标签而非容器
C/Java中变量是预先开辟的内存容器,赋值是往容器里放数据;但Python采用引用语义,所有数据都是内存中的独立对象,变量只是指向对象的内存地址标签。执行代码a = 18完整流程:
CPython解释器在堆内存开辟空间,创建整型对象18,分配唯一内存地址0x7001
在栈内存创建变量名a,存储0x7001地址,完成绑定
执行
a = 20:不会修改原18的内存数据,而是新建对象20,让a标签解绑旧地址、绑定新地址
配套验证代码:通过id()查看内存地址,直观验证解绑逻辑
a = 18 print(id(a)) # 输出原有地址 a = 20 print(id(a)) # 地址彻底改变,原18等待垃圾回收延伸知识点:Python小整数池。-5~256之间的整数会常驻内存,全局复用地址,避免重复开辟内存,属于解释器底层优化。
二、变量命名:强制语法规则(报错红线)+PEP8规范(团队红线)
1、语法强制规则(违反直接程序报错)
组成字符:仅支持大小写字母、数字、下划线,禁止!@#等特殊符号
开头限制:不能以数字开头,
1name非法,name1合法关键字禁用:不能使用if、def、class、return等35个Python内置保留字,可通过
import keyword;print(keyword.kwlist)查询全部关键字大小写敏感:Age和age是两个完全独立变量,内存地址互不干扰
2、PEP8行业规范(不报错但代码不合格)
普通变量、函数:蛇形命名 user_age、student_list,禁止驼峰
禁止单字母无意义命名:除循环i/j/k外,拒绝a、b这类无法读懂的变量
不使用中文变量:Python3语法支持中文变量,但跨系统、低版本解释器会乱码,生产环境禁用
三、Python常量:无原生常量,两套生产级写法
和Java final不同,Python语法层面没有不可修改的常量关键字,只能通过约定+工具实现只读:
约定式常量(新手首选):全大写蛇形命名,如
MAX_PAGE = 100,团队约定不修改该变量,仅靠人为约束强制只读常量(生产环境):使用标准库types中的NamedTuple,或者第三方库const,修改直接抛出异常,杜绝误改
新手避坑总结
1、变量赋值永远是地址引用,不存在数据拷贝;
2、命名先保语法合法,再贴合PEP8;
3、日常开发只用全大写约定常量,无需过度引入第三方库
