<script type="text/javascript"></script><script type="text/javascript"></script>
《Python开发技术详解》试读:2.2.1 命名规则
2.2 Python的编码规则
Python语言有自己独特的编码规则,包括命名规则、代码书写规则等。本节将详细介绍Python中常用的规则,并解释这些规则的原理和由来。
2.2.1 命名规则
Python语言有一套自己的命名规则,用户也可以借鉴Java语言的命名规则以形成自己编码的规则。命名规则并不是规定,只是一种习惯用法。变量名的首字符必须是字母或下划线,首字符之外的字符可以由字母、数字或下划线组成,并且不能使用Python的保留字。下面介绍几种常见的规则。
1.变量名、包名、模块名
变量名通常由字母和下划线组成,包名、模块名通常用小写字母,如【例2-1】所示。
【例2-1】演示变量名、包名、模块名的规范写法。
# 变量、模块名的命名规则
# Filename: ruleModule.py
_rule = "rule information"
第1行代码是程序代码的注释,关于Python语言的注释请参见2.2.5节。
第2行代码也是程序的注释,用于声明模块的名称,模块名用小写字母。也可以不指定模块名,以py后缀的文件就是一个模块。模块名就是文件名。
第4行代码定义了一个全局变量_rule。
2.类名、对象名
类名首字母用大写,其他字母采用小写。对象名用小写字母。类的属性和方法名以对象作为前缀,对象通过操作符“.”访问属性和方法。类的私有变量、私有方法以两个下划线作为前缀。如【例2-2】所示。
【例2-2】演示类的定义和实例化的规范写法。
class Student:# 类名用大写字母
__name = ""# 私有实例变量前必须有两个下划线
def __init__(self, name):
self.__name = name# self相当于Java中的this
def getName(self):# 方法名首字母用小写,其后每个单词的首字母用大写
return self.__name
if __name__ == "__main__":
student = Student("borphi")# 对象名用小写字母
printstudent.getName()
第1行代码定义了一个名为Student的类,类名首字母大写。
第2行代码定义了一个私有的实例变量,变量名前有两个下划线。
第4行代码使用self前缀说明__name变量属于Student类。
第5行代码定义了一个公有的方法,方法名首字母小写,其后的单词“Name”首字母大写。函数的命名规则与此相同。
第9行代码创建了一个student对象,对象名小写。
说明关于面向对象的编程知识将在第8章详细介绍,读者此时只要知道类、对象、属性以及方法的书写方式即可。
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-3】演示函数的规范写法,其中定义了一个函数compareNum(),该函数用于比较两个数字的大小,并返回对应的结果。
# 函数中的命名规则
import random
def compareNum(num1, num2):
if(num1 > num2):
return 1
elif(num1 == num2):
return 0
else:
return -1
num1 = random.randrange(1, 9)
num2 = random.randrange(1, 9)
print "num1 =", num1
print "num2 =", num2
print compareNum(num1, num2)
第2行代码导入了random模块。
第4行代码定义了一个函数compareNum(),参数num1、num2为待比较的两个变量。
第5行到第10行代码比较两个数的大小,根据比较结果返回不同的结果。
第11行、第12行代码调用random模块的randrange()返回两个随机数。
第13行、第14行代码输出随机数,不同的机器、不同的执行时间得到的随机数均不相同。
第15行代码调用compareNum(),并把产生的两个随机数作为参数传入。
良好的命名习惯可以提高编程效率,使代码阅读者在不了解文档的情况下,也能理解代码的内容。
下面以变量的命名为例,说明如何定义有母实际含义的名称。许多程序员对变量的命名带有随意性,如使用i、j、k等单个字母。代码阅读者并不知道这些变量的实际含义,需要阅读文档或仔细查看源代码才能了解其含义。
【例2-4】演示变量命名不规范的写法。
# 不规范的变量命名写法
sum = 0
i = 2000
j = 1200
sum = i + 12 * j
这段代码定义了一个求和变量sum,以及两个变量i、j。如果只看代码片段,并不知道该运算的含义是什么,需要通读整个函数或功能模块才能理解此处各个变量的含义。
【例2-5】演示符合命名规则的写法。
# 规范的变量命名写法
sumPay = 0
bonusOfYear = 2000
monthPay = 1200
sumPay = bonusOfYear + 12 * monthPay
bonusOfYear表示年终奖金、monthPay表示月薪,因此sumPay表示全年的薪水。使变量的名字有实际含义可以节省阅读程序的时间,能更快地理解程序的含义。
注意变量的命名应尽可能的表达此变量的作用,尽量避免使用缩写,以便使任何人都能理解变量名的含义。不要过多的担心变量名的长度,长的变量名往往能更表达清楚该变量的作用。
以上讨论的命名方式同样适用于模块名、类名、方法名、属性名等。遵守命名规则会带来很多好处。统一的命名规则便于程序开发团队合作开发同一个项目;便于统一代码的风格,理解不同程序员编写的代码;命名规范的变量名可以使程序代码更容易被理解;避免项目中随意命名变量的情况,促进程序员之间的交流。规则并不是绝对的,统一规则、表达清楚名称的含义才是制定规则的目的。
<script type="text/javascript"></script><script type="text/javascript"></script>
<!-- baggins1-->