python语言命名规则
和C/C++、Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而提高编写代码的效率。 我们在平常编写程序的时候需要注意以下几点:
1.python变量名命名的硬性规则
1.1 变量名大小写敏感
python变量名区分大小写,也就是Student和student在python语言中代表两个不同的名字。
1.2 python的变量名字中可以包含英文、下划线、数字,但是不能以数字开头。
也就是说,student_id、student1、student_1、student、_student、_等都是合理的命名,但是1student就是非法的命名。
2.不同风格命名的变量代表不同的类型
与java中命名习惯使用驼峰命名法不同(有可能发明java的程序猿大哥不但喜欢喝爪哇岛的咖啡,也喜欢骑爪哇岛上的骆驼,哈哈),python变量命名一般采用蛇形命名法(毕竟python的本意就是大蟒蛇),也就是如果变量名由两个单词组成,那么使用下划线来连接这两个单词,比如student_id。当然,我们也会在python中看到类似驼峰命名法的变量名,对于专业的程序猿来说,这些命名都不是随便写的,他们符合一定的标准,下面总结以下:
2.1 模块(module)命名风格
模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
# 正确的模块名 import decoder import html_parser # 不推荐的模块名 import Decoder
2.2 类(class)的命名
类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
class Farm(): pass class AnimalFarm(Farm): pass class _PrivateFarm(Farm): pass
2.3 函数(function)的命名
函数名一律小写,如有多个单词,用下划线隔开。
def run(): pass def run_with_env(): pass
2.4 变量(variable)的命名
变量名尽量小写, 如有多个单词,用下划线隔开
if __name__ == '__main__': count = 0 school_name = ''
2.5 常量(constant)的命名
如果我们想用一个符号来代表常量(值是不变的量,比如光速、π等),采用全部大写,如有多个单词,使用下划线隔开。
MAX_CLIENT = 100 MAX_CONNECTION = 1000 CONNECTION_TIMEOUT = 600
3.“下划线”开头的特殊命名
很多时候,我们在python的源代码中会看到下划线开头的变量,初学者看到这些变量会感觉怪怪的。确实,这些“_”开头的命名是具有特殊含义的:
3.1 单下划线开头的命名
- 如果类变量以单下划线“_”开头,代表这个变量不能被直接访问,类似于C++中的protected型,这样的变量也不能被 import
- module_name导入。
- 使用单下划线(one underline)开头的方法,则表示该方法不是AP的一部分,不要直接访问(虽然语法上访问也没有什么问题)。
3.2 双下划线开头的命名
- 以双下划线(two underlines)开头的类变量,表示为类的私有成员,不能被导入和其他类变量访问。
- 对于类中的方法,使用双下划线开头开头表示子类不能覆写该方法。除非你真的知道你在干什么,否则不要使用这种方式。
3.3 双下划线开头并且双下划线结尾的命名
魔法方法:以双下划线开头和双下划线结尾的变量是Python的专用标识,有其特殊的身份。我们一般称这样的方法为“魔法方法”(magic method)。
- 魔法方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法,可以理解为重写这些python的内置函数。
- 当你想让自己定义的对象也可以像Python内置的对象一样使用内置的一些函数或操作符(比如len、add、+、、==等)时,你可以定义该类方法。
- 当然还有些属性只在末尾加了但下划线这仅仅是为了避免我们起的一些名字和Python保留关键字冲突,没有特殊含义。
- 下划线变量(方法)的使用,往往和面向对象编程中类(class)的设计相关,更多更深入的知识,可以参考 这篇博客。当然,如果需要了解更多python编程规范,PEP8(Python Enhancement Proposal8)的官方文档是最佳的参考资料。
转载: https://cloud.tencent.com/developer/article/1724363?from=article.detail.2089761&areaSource=106000.1&traceId=EAMFErIIl00qm_1bpFpSh