- 零基础学Python(第2版)
- 黄传禄 张克强 赵越
- 1849字
- 2025-03-22 17:26:45
2.2.1 命名规则
Python语言有一套自己的命名规则,用户也可以借鉴Java语言的命名规则形成自己命名的规则。命名规则并不是规定,只是一种习惯用法。下面介绍几个常见规范。
1.变量名、包名、模块名
变量名、包名、模块名通常采用小写,可使用下划线,示例如下。
01 # 变量、模块名的命名规则 02 # Filename: ruleModule.py 03 04 _rule = "rule information"
【代码说明】
·第2行代码声明模块的名称,模块名采用小写。也可以不指定模块名,以py后缀的文件就是一个模块。模块名就是文件名。
·第4行代码定义了一个全局变量_rule。
2.类名、对象名
类名首字母采用大写,对象名采用小写。类的属性和方法名以对象作为前缀。类的私有变量、私有方法以两个下划线作为前缀。下面【例2-1】这段代码演示了类的定义和实例化的规范写法。
【例2-1.py】
01 class Student: # 类名大写 02 __name = "" # 私有实例变量前必须有两个下划线 03 def __init__(self, name): # 创建init函数,自动调用并初始化 04 self.__name = name # self相当于Java中的this 05 def getName(self): # 方法名首字母小写,其后每个单词的首字母大写 06 return self.__name # 返回name的值 07 08 if __name__ == "__main__": # 主程序运行 09 student = Student("borphi") # 对象名小写 10 print(student.getName()) # 输出调用函数getName获得的值
【代码说明】
·第1行代码定义了一个名为Student的类,类名首字母大写。
·第2行代码定义了一个私有的实例变量,变量名前有两个下划线。
·第4行代码使用self前缀说明__name变量属于Student类。
·第5行代码定义了一个公有的方法,方法名首字母小写,其后的单词Name首字母大写。函数的命名规则和方法名相同。
·第9行代码创建了一个student对象,对象名小写。
·第10行代码输出结果为:borphi。
说明 关于面向对象的知识会在第9章详细介绍,这里读者只需要知道类、对象、属性以及方法的书写方式即可。
3.函数名
函数名通常采用小写,并用下划线或单词首字母大写增加名称的可读性,导入的函数以模块名作前缀。下例中,为了演示导入函数前缀写法,使用了生成随机数的模块random。该模块有一个函数randrange()。该函数可以根据给定的数字范围生成随机数。randrange()声明如下所示:
randrange(start, stop[, step])
【代码说明】
·参数start表示生成随机数所在范围的开始数字。
·参数stop表示生成随机数所在范围的结束数字,但不包括数字stop。
·参数step表示从start开始往后的步数。生成的随机数在[start,stop-1]的范围内,取值等于start+step。
例如:
randrange(1, 9, 2)
随机数的范围在1、3、5、7之间选取。下面【例2-2】这段代码演示了函数的规范写法,其中定义了一个compareNum(),该函数用于比较两个数字的大小,并返回对应的结果。
【例2-2.py】
01 # 函数中的命名规则 02 import random # 导入random模块 03 04 def compareNum(num1, num2): # 定义带参数的compareNum函数 05 if(num1 > num2): # if判断两个数大小,返回不同的值 06 return 1 07 elif(num1 == num2): 08 return 0 09 else: 10 return -1 11 num1 = random.randrange(1, 9) # 产生随机数并赋值给num1 12 num2 = random.randrange(1, 9) # 产生随机数并赋值给num2 13 print( "num1 =", num1) 14 print ("num2 =", num2) 15 print (compareNum(num1, num2)) # 调用compareNum函数
【代码说明】
·第2行代码导入了random模块。
·第4行代码定义了一个函数compareNum(),参数num1、num2为待比较的两个变量。
·第5行到第10行代码比较两个数的大小,返回不同的结果。
·第11、12行代码调用random模块的randrange()函数,返回两个随机数。
·第13、14行代码输出随机数,不同的机器、不同的执行时间得到的随机数均不相同。
·第15行代码调用compareNum(),并把产生的两个随机数作为参数传入。
良好命名可以提高编程效率,可以使代码阅读者在不了解文档的情况下,也能理解代码的内容。下面以变量的命名为例说明如何定义有价值的名称。许多程序员对变量的命名带有随意性,如使用i、j、k等单个字母。代码阅读者并不知道这些变量的真实含义,需要阅读文档或仔细查看源代码才能了解其含义。下面是一个命名不规范的例子。
01 # 不规范的变量命名 02 sum = 0 03 i = 2000 04 j = 1200 05 sum = i + 12 * j
【代码说明】这段代码定义了一个求和变量sum,以及两个变量i、j。如果只看代码片段,并不知道运算的含义是什么,需要通读整个函数或功能模块才能理解此处表达式的含义。
下面是一个良好命名的例子。
01 # 规范的变量命名 02 sumPay = 0 03 bonusOfYear = 2000 04 monthPay = 1200 05 sumPay = bonusOfYear + 12 * monthPay
【代码说明】bonusOfYear表示年终奖金、monthPay表示月薪,因此sumPay表示全年的薪水。命名良好的变量可以节省阅读程序的时间,更快地理解程序的含义。
注意 变量的命名应尽可能地表达此变量的作用,尽量避免使用缩写,以至于任何人都能理解变量名的含义。不用担心变量名的长度,长的变量名往往能更清楚地表达意思。
以上讨论的命名方式同样适用于模块名、类名、方法名、属性名等。命名规则会带来很多益处。统一命名规则便于开发团队合作开发同一个项目;便于统一代码的风格,理解不同程序员编写的代码;命名规范的变量名使函数的内容更容易被理解;避免项目中随意命名变量的情况,促进程序员之间的交流。规则并不是绝对的,统一规则、表达清楚名称的含义才是制定规则的原因。