为何Python风格指南对全局与局部变量采用相同命名规范?
PEP8对全局变量和局部变量采用统一命名约定,是多方面设计考量平衡后的结果,并非忽略清晰度问题:
- 靠语法规则而非命名约定区分作用域,更可靠也更简洁
Python本身要求修改全局变量前必须用global关键字显式声明,没有声明的情况下对同名变量赋值会默认创建局部变量,不存在无意识修改全局变量的问题。而且符合PEP8规范的函数通常代码长度较短,局部变量的作用域仅在几十行范围内,开发者很容易识别变量的作用域,不需要额外加g_之类的前缀增加阅读负担。 - 降低代码重构的边际成本
开发过程中经常会调整变量的作用域:比如原本的全局变量要收拢到函数内部变成局部变量,或者原本的局部变量要提取成全局通用的变量,不需要修改变量名就能直接调整,既减少无意义的代码修改量,也避免了改名过程中可能出现的拼写错误。 - 避免命名规则过度复杂化
如果给全局变量单独制定命名规则,那模块变量、类变量、实例变量、闭包外层变量等不同作用域的变量,是不是都要设计单独的命名约定?这会让风格规范变得非常臃肿,大幅提升开发者的学习和落地成本,反而违背了PEP8统一代码风格、降低跨项目阅读成本的初衷。
另外PEP8也针对特殊的全局变量做了差异化约定:模块级的常量默认采用全大写加下划线的命名方式,比如DEFAULT_TIMEOUT = 30,已经覆盖了绝大多数需要特殊标识的全局变量场景。
内容的提问来源于stack exchange,提问作者Derrick
相关产品推荐
相关产品推荐

