Python从入门到精通
上QQ阅读APP看书,第一时间看更新

2.1 Python语法特点

学习Python需要了解它的语法特点,如注释规则、代码缩进、编码规范等。下面将对学习Python时首先需要了解的这些语法特点进行详细介绍。

2.1.1 注释规则

注释类似于语文课本中古诗里的注释,如图2.1所示。也就是在代码中添加的标注性的文字,从而帮助程序员更好地阅读代码。注释的内容将被Python解释器忽略,并不会在执行结果中体现出来。

图2.1 古诗里的注释

在Python中,通常包括3种类型的注释,分别是单行注释、多行注释和中文注释。这些注释在IDLE中的效果如图2.2所示。

图2.2 Python中的注释

1.单行注释

在Python中,使用“#”作为单行注释的符号。从符号“#”开始直到换行为止,其后面所有的内容都作为注释的内容而被Python编译器忽略。

语法如下:

    # 注释内容

单行注释可以放在要注释代码的前一行,也可以放在要注释代码的右侧。例如,下面的两种注释形式都是正确的。

第一种形式:

01  # 要求输入身高,单位为m(米),如1.70
02  height=float(input("请输入您的身高:"))

第二种形式:

    height=float(input("请输入您的身高:"))  # 要求输入身高,单位为m(米),如1.70

上面两种形式的运行结果都是如图2.3所示的效果。

图2.3 运行结果

说明

在添加注释时,一定要有意义,即注释能充分体现代码的作用。例如,如图2.4所示的注释就是冗余的注释。如果将其注释修改为如图2.5所示的注释,就能很清楚地知道代码的作用了。

图2.4 冗余的注释

图2.5 推荐的注释

注意

注释可以出现在代码的任意位置,但是不能分隔关键字和标识符。例如,下面的代码注释是错误的:

    height=float(#要求输入身高 input("请输入您的身高:"))

说明

在IDLE开发环境中,可以通过选择主菜单中的Format→Comment Out Region菜单项(也可直接使用快捷键Alt+3),将选中的代码注释掉,也可通过选择主菜单中的Format→UnComment Region菜单项(也可直接使用快捷键Alt+4),取消添加的单行注释。

2.多行注释

在Python中,并没有一个单独的多行注释标记,而是将包含在一对三引号('''……''')或者("""……""")之间,并且不属于任何语句的内容认为是注释。对于这样的代码,解释器将忽略。由于这样的代码可以分为多行编写,所以也作为多行注释。

语法格式如下:

    '''
        注释内容1
        注释内容2
        ……
    '''

或者

    """
        注释内容1
        注释内容2
        ……
    """

多行注释通常用来为Python文件、模块、类或者函数等添加版权、功能等信息。例如,下面代码将使用多行注释为demo.py文件添加版权、功能及修改日志等信息。

01  '''
02   @ 版权所有:吉林省明日科技有限公司?版权所有
03   @ 文件名:demo.py
04   @ 文件功能描述:根据身高、体重计算BMI指数
05   @ 创建日期:2017年10月31日
06   @ 创建人:无语
07   @ 修改标识:2017年11月2日
08   @ 修改描述:增加根据BMI指数判断身材是否合理功能代码
09   @ 修改日期:2017年11月2日
10  '''

注意

在Python中,三引号('''……''')或者("""……""")是字符串定界符。所以,如果三引号作为语句的一部分出现,那么就不是注释,而是字符串,这一点要注意区分。例如,如图2.6所示的代码即为多行注释,而如图2.7所示的代码即为字符串。

图2.6 三引号为多行注释

图2.7 三引号为字符串

3.中文注释

在Python中,还提供了一种特殊的中文注释。该注释的出现主要是为了解决Python 2.x中不支持直接写中文的问题。虽然在Python 3.x中,该问题已经不存在了。但是为了规范页面的编码,也为了方便其他人及时了解文件所用的编码,建议在文件开始加上中文注释。

语法格式如下:

    # -*- coding:编码 -*-

或者

    #coding=编码

在上面的语法中,编码为文件所使用的字符编码类型,如果采用UTF-8编码,则设置为utf-8;如果采用GBK,则设置为gbk或cp936。

例如,指定编码为UTF-8,可以使用下面的中文注释。

    # -*- coding:utf-8 -*-

说明

在上面的代码中,“-*-”没有特殊的作用,只是为了美观才加上的。所以上面的代码也可以使用“# coding:utf-8”代替。

另外,下面的代码也是正确的中文注释。

    #coding=utf-8

2.1.2 代码缩进

Python不像其他程序设计语言(如Java或者C语言)采用大括号“{}”分隔代码块,而是采用代码缩进和冒号“:”区分代码之间的层次。

说明

缩进可以使用空格或者Tab键实现。其中,使用空格时,通常情况下采用4个空格作为一个缩进量,而使用Tab键时,则采用一个Tab键作为一个缩进量。通常情况下建议采用空格进行缩进。

在Python中,对于类定义、函数定义、流程控制语句,以及异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束,则表示一个代码块的结束。

例如,下面的代码中的缩进即为正确的缩进。

Python对代码的缩进要求非常严格,同一个级别的代码块的缩进量必须相同。如果不采用合理的代码缩进,将抛出SyntaxError异常。例如,代码中有的缩进量是4个空格,还有的是3个空格,就会出现SyntaxError错误,如图2.8所示。

图2.8 缩进量不同导致的SyntaxError错误

在IDLE开发环境中,一般以4个空格作为基本缩进单位。不过也可以选择Options→Configure IDLE菜单项,在打开的Settings对话框(如图2.9所示)的Fonts/Tabs选项卡中修改基本缩进量。

图2.9 修改基本缩进量

2.1.3 编码规范

下面给出两段实现同样功能的代码,如图2.10所示。

图2.10 两段功能相同的Python代码

大家在学习时,愿意看到图2.10中的左侧代码还是右侧代码?答案应该是一致的,大家肯定都喜欢阅读图2.10中右侧的代码,因为它看上去更加规整,这是一种最基本的代码编写规范。遵循一定的代码编写规则和命名规范可以使代码更加规范化,对代码的理解与维护起到至关重要的作用。

本节将对Python代码的编写规则以及命名规范进行介绍。

1.编写规则

Python中采用PEP 8作为编码规范,其中PEP是Python Enhancement Proposal的缩写,翻译过来是Python增强建议书,而PEP 8表示版本,它是Python代码的样式指南。下面给出PEP 8编码规范中的一些应该严格遵守的条目。

 每个import语句只导入一个模块,尽量避免一次导入多个模块。如图2.11所示为推荐写法,而如图2.12所示为不推荐写法。

图2.11 推荐写法

图2.12 不推荐写法

 不要在行尾添加分号“;”,也不要用分号将两条命令放在同一行。例如,如图2.13所示的代码为不规范的写法。

图2.13 不规范写法

 建议每行不超过80个字符,如果超过,建议使用小括号“()”将多行内容隐式地连接起来,而不推荐使用反斜杠“\”进行连接。例如,如果一个字符串文本在一行上显示不下,那么可以使用小括号“()”将其分行显示,代码如下:

01  print("我一直认为我是一只蜗牛。我一直在爬,也许还没有爬到金字塔的顶端。"
02        "但是只要你在爬,就足以给自己留下令生命感动的日子。")

例如,以下通过反斜杠“\”进行连接的做法是不推荐使用的。

01  print("我一直认为我是一只蜗牛。我一直在爬,也许还没有爬到金字塔的顶端。\
02  但是只要你在爬,就足以给自己留下令生命感动的日子。")

不过以下两种情况除外:导入模块的语句过长;注释里的URL。

 使用必要的空行可以增加代码的可读性。一般在顶级定义(如函数或者类的定义)之间空两行,而方法定义之间空一行。另外,在用于分隔某些功能的位置也可以空一行。

 通常情况,运算符两侧、函数参数之间、逗号“,”两侧建议使用空格进行分隔。

 应该避免在循环中使用+和+=操作符累加字符串。这是因为字符串是不可变的,这样做会创建不必要的临时对象。推荐的做法是将每个子字符串加入列表,然后在循环结束后使用join()方法连接列表。

 适当使用异常处理结构提高程序容错性,但不能过多依赖异常处理结构,适当的显式判断还是必要的。

说明

在编写Python程序时,建议严格遵循PEP 8编码规范。完整的Python编码规范请参考PEP 8。

2.命名规范

命名规范在编写代码中起到很重要的作用,虽然不遵循命名规范,程序也可以运行,但是使用命名规范可以更加直观地了解代码所代表的含义。下面将介绍Python中常用的一些命名规范。

 模块名尽量短小,并且使用全部小写字母,可以使用下划线分隔多个字母。例如,game_main、game_register、bmiexponent都是推荐使用的模块名称。

 包名尽量短小,并且使用全部小写字母,不推荐使用下划线。例如,com.mingrisoft、com.mr、com.mr.book都是推荐使用的包名称,而com_mingrisoft就是不推荐的。

 类名采用单词首字母大写形式(即Pascal风格)。例如,定义一个借书类,可以命名为BorrowBook。

说明

Pascal是以纪念法国数学家Blaise Pascal而命名的一种编程语言,Python中的Pascal命名法就是根据该语言的特点总结出来的一种命名方法。

 模块内部的类采用下划线“_”+Pascal风格的类名组成。例如,在BorrowBook类中的内部类,可以使用_BorrowBook命名。

 函数、类的属性和方法的命名规则同模块类似,也是全部采用小写字母,多个字母间用下划线“_”分隔。

 常量命名时采用全部大写字母,可以使用下划线。

 使用单下划线“_”开头的模块变量或者函数是受保护的,在使用import*from语句从模块中导入时这些变量或者函数不能被导入。

 使用双下划线“__”开头的实例变量或方法是类私有的。