3.1 Python编码规范
在学习Python时需要了解它的语法特点,包括命名规则、代码缩进、注释空行和语句分隔等。本节将先行介绍Python中常用的一些规则。
3.1.1 命名规则
在代码编写过程中,命名规则格外重要。命名规则并不是规定,只是一种习惯性用法。虽然不遵循命名规则,程序也可以正常运行,但命名规则易于他人理解代码所代表的含义。命名不仅包含字母、数字和下画线,值得注意到是,其还可以包含汉字字符。
常见的命名方式有两种:驼峰命名法和下画线命名法。驼峰命名法除一个单词外,其他单词第一个字母大写,例如:applePie、firstBook、theGoodBoy。下画线命名法单词的首字母小写,使用下画线间隔单词,例如apple_pie、first_book、the_1_road。
1.模块名
模块名通常采用小写字母命名,首字母保持小写,尽量不要用下画线(除非多个单词,且数量不多的情况)。
2.类名
类名使用驼峰命名风格,首字母大写,私有类可用一个下画线开头。将相关的类和顶级函数放在同一个模块中。
3.函数名
函数和类方法的命名规则同模块名类似,也是全部使用小写字母,但是多个单词之间用下画线分隔。私有函数在函数前面加一个下画线。
4.变量名
变量使用小写字母,如果一个名字包含几个单词,将这几个单词连接在一起构成一个变量名,第一个单词要小写,而后续的每个单词的第一个字母大写,例如number Of Students。
除了驼峰命名法,也可以采用下画线隔开的方式。但是在编写代码时,推荐尽量使用同一种风格。
5.常量
常量命名时全部使用大写字母,如果有多个单词,使用下画线隔开。
3.1.2 代码缩进与冒号
对于Python而言,代码缩进是一种语法。代码缩进是指通过在每行代码前输入空格或者制表符的方式表示每行代码之间的层次关系。Python没有明确的开始(Begin)或者结束(End),也没有用大括号来标记函数从哪里开始到哪里停止,而是采用代码缩进和冒号来区分代码之间的层次。
缩进的空白数量可变,但是所有代码块语句必须包含相同的缩进空白,这个必须严格执行。Python程序使用代码缩进区分不同层次的代码块,缩进层次越多,代码块嵌套层级越深,缩进一般4个空格。一般函数、类、控制结构都需要深度缩进,区分不同层次代码块。例如:
Python对代码的缩进要求非常严格。如果代码缩进不合理,程序将抛出SyntaxError异常。
f()运行该段代码将会抛出异常。错误表明,第4行的第二层嵌套应该缩进8个空格占位,调整好缩进后该段代码才能正确运行。
说明 缩进可以使用空格或者〈Tab〉键实现。其中,使用空格时,通常情况下采用4个空格作为一个缩进量,而是用〈Tab〉键时,则采用一个〈Tab〉键作为缩进量。通常情况下建议采用空格进行缩进。
在Python中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束。缩进相同的一组语句构成一个代码块,称之为代码组,像if、while、def和class这样的复合语句,首字母以关键字开始,以冒号(:)结束,该行之后的一行或多行代码构成代码组,可见代码清单3-1中的示例。
代码清单3-1 冒号分割函数
运行结果:
3.1.3 模块导入语法
模块是类或函数的集合,用于处理一类问题。模块的导入和Java中的包的导入概念类似,都使用import语句。在Python中,如果需要在程序中调用标准库或第三方库,需要先使用import或from…import…语句导入相关的模块。
1.import语句
下面这段代码使用import语句导入sys模块,并打印相关内容。
2.from…import…语句
使用from…import…语句导入与使用import语句导入有所不同,区别是前者只是导入模块中的一部分内容,并在当前的命名控件中创建导入对象的引用;而后者在当前程序的命名空间中创建导入模块的引用,从而可以使用“sys.path”的方式调用sys模块中的内容。
以这种方式导入的情况下,若程序复杂,导入模块较多,阅读程序时将无法辨别path来自哪个模块,而通过sys.path的写法可以清楚path来自于sys模块。
提示 在用import语句导入模块时最好按照这样的顺序:(1)Python标准库模块;(2)Python第三方模块;(3)自定义模块。
3.1.4 空行分割代码
函数之间或类的方法之间用空行分隔,表示一段新代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解析器运行也不会报错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。记住,空行也是程序代码的一部分。示例见代码清单3-2。
代码清单3-2 空行分割函数
运行结果:
在类定义的第6和第9行插入了空行,表示区分类属性和方法之间的间隔,第12行和第18行也是一个空行,第12行下面的代码定义了一个函数,第18行下面的代码调用主函数。
3.1.5 注释和续行
注释(Comment)起解释说明作用,常用来标注该程序的用途及构建方式。帮助理解代码实现的功能、采用的算法、代码的编写者以及代码创建和修改的时间等信息。
在Python中如果只对单行代码注释,则从井号“#”开始到行末结束的内容都是注释。多行注释可以用三个单引号'''或者三个双引号"""将注释内容包裹起来。
上面的这段代码Python会忽略注释行的内容,执行后面的内容。
Python语句中一般以新行作为语句的结束符。一个长的语句可以通过在行尾使用反斜杠“\”将一行的语句分为多行显示。
若语句中包含[]、{} 或(),那么就无需使用多行连接符,见如下示例。
Python代码中一行只能有一个语句,以新行作为语句的结束符。如果一行含有多个语句将会抛出异常。代码清单3-3展示了注释和续行的作用。
代码清单3-3 注释和续行
运行结果:
3.1.6 语句分割
分号是C、Java等语言中标识语句结束的标志。Python也支持分号,同样可以用分号作为一行语句的结束标识。但在Python中分号的作用已经不像在C、Java中那么重要了,可以省略,而语句结束通过换行来识别。例如下面两行代码是等价的。
但如果在一行中书写多个语句,就必须使用分号分隔,否则Python无法识别语句间隔。
代码中3条赋值语句之间需要用分号隔开,否则Python解析器不能正确解析,会提示语法错误SyntaxError。
注意 分号并不是Python推荐使用的符号,Python倾向于使用换行作为每条语句的分隔。简单直白是Python语法的特点,通常一行只写一条语句,这样便于阅读和理解程序。一行写多条语句的方式是不好的编程风格。