Python语言基础——Python 语法特点

Python 语法特点

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

Python 语法特点思维导图

1. 注释

在 Python 中,通常包括 3 种类型的注释,分别是单行注释多行注释文件编码声明注释

1.1 定义

注释:在程序代码中对程序代码进行解释说明的文字。

作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性。

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

1.2 单行注释

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

语法如下:

# 这是单行注释!

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

扫描二维码关注公众号,回复: 15692066 查看本文章

第一种形式:

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

第二种形式:

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

上述两种形式的代码,其运行结果都如图 2.1 所示。

图 2.1 运行结果

图 2.1 运行结果

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

图 2.2 冗余的注释

图 2.2 冗余的注释

图 2.3 推荐的注释
图 2.3 推荐的注释

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

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

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

如果使用的是 Pycharm 或者 Idea 等工具,可以使用快捷键 Ctrl + / ),将选中或者单行的代码注释掉 或者 取消代码的注释。

1.2 多行注释

在 Python 中并没有一个单独的多行注释标记,而是将包含在一对三引号(即 ‘’‘……’‘’ 或者 “”“……”“”)中,并且不输入任何语句的内容则认为是注释。对于这样的代码,将被解释器忽略。由于这样的代码可以分为多行编写,因次也作为多行注释。

语法格式如下:

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

或者

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

在使用三引号作为注释时,需要注意,三引号必须成对出现,如果只写一半三引号,那么当程序运行的时,将会提示 **EOF while scanning triple-quoted string literal **错误。

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

'''
@ Date:2023.02.04
@ Created:雾
@ Version:1.0
@ Description:根据身高、体重计算并返回其 BMI 指数
'''

如果三引号 ‘’‘……’‘’ 或者 ‘’‘……’‘’ 出现在语句中,那么就不是注释,而是字符串,这一点要注意区分。例如,图 2.4 中的代码即为多行注释,而图 2.5 中的代码即为字符串。

图 2.4 三引号为多行注释

图 2.4 三引号为多行注释

图 2.5 三引号为字符串
图 2.5 三引号为字符串

1.3 文件编码声明注释

在 Python 3 中,默认采用的文件编码是 UTF-8。这种编码支持世界上大多数语言的字符,也包括中文。如果不想使用默认编码,就需要在文件的第一行声明文件的编码,也就是需要使用文件编码声明注释。

语法格式如下:

# -*-coding:编码 -*-

或者

# coding=编码

在上述语法中,编码为文件所使用的字符编码类型,如果采用 GBK,则设置为 gbk 或者 cp936。

例如,指定编码为 GBK,可以使用以下中文注释:

# -*-coding:gbk -*-

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

另外,以下代码也是正确的中文注释:

# coding = gbk

2. 代码缩进

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

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

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

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

def find_max_subarray(array):
    """

    :param array: 含有 n 个元素的数组
    :return: 三种情况中,元素和最大的数组就是整个数组的最大子数组
    """
    if len(array) <= 1:
        return array, array[0]  # 当数组元素小于等于 1 时,直接返回
    left_part = array[0:int(len(array) / 2)]  # 将数组分割为两部分
    right_part = array[int(len(array) / 2):len(array)]
    left_sub_array, left_max = find_max_subarray(left_part)  # 递归求取左半部分最大子数组
    right_sub_array, right_max = find_max_subarray(right_part)  # 递归求取右半部分最大子数组
    crossing_sub_array, crossing_max = find_max_crossing_subarray(array, int(len(array) / 2) - 1)  # 获得横跨左右两部分的最大子数组
    max_sub_array, max_sum = left_sub_array, left_max
    if right_max > left_max:
        max_sub_array, max_sum = right_sub_array, right_max
    if crossing_max > max_sum:
        max_sub_array, max_sum = crossing_sub_array, crossing_max
    return max_sub_array, max_sum  # 三种情况中,元素和最大的数组就是整个数组的最大子数组

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

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

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

在 IDLE 开发环境中,一般以 4 个空格作为代码的基本缩进单位。不过也可以选择 Options -> Configure IDLE 菜单项,在打开的 Settings 对话框的 Font/Tabs 选项卡中修改代码的基本缩进量。

3. 编码规范

大家在学习的时候,肯定更喜欢阅读规整的代码,这是一种最基本的代码编写规范。遵循一定的代码编写规则和命名规范可以使代码更加规范化,对代码的理解与维护起到至关重要的作用。以下将对 Python 代码的编写规则以及命名规范进行介绍。

3.1 编写规则

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

  • ​每个 import 语句只导入一个模块,尽量避免一次导入多个模块。图 2.7 为推荐的写法,而图 2.8 为不推荐的写法。

图 2.7	推荐的写法

图 2.7 推荐的写法

图 2.8	不推荐的写法
图 2.8 不推荐的写法

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

图 2.9	不规范的写法

图 2.9 不规范的写法法

  • 建议每行不超过 80 个字符,如果超过,建议使用小括号 “()” 将多行的内容隐式地连接起来,而不推荐用反斜杠 “\” 进行连接。例如:如果一个字符串文本在一行上显示不下,那么可以使用小括号 “()" 将其进行分行显示,代码如下:
print("古巴比伦王颁布了汉谟拉比法典"
      "刻在黑色的玄武岩"
      "距今已经三千七百多年"
      "你在橱窗前 凝视碑文的字眼"
      "我却在旁静静欣赏你那张我深爱的脸"
      "祭司 神殿 征战 弓箭 是谁的从前"
      "喜欢在人潮中你只属于我的那画面"
      "经过苏美女神身边 我以女神之名许愿")

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

print("古巴比伦王颁布了汉谟拉比法典\
刻在黑色的玄武岩\
距今已经三千七百多年\
你在橱窗前 凝视碑文的字眼\
我却在旁静静欣赏你那张我深爱的脸\
祭司 神殿 征战 弓箭 是谁的从前\
喜欢在人潮中你只属于我的那画面\
经过苏美女神身边 我以女神之名许愿")

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

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

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

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

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

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

3.2 命名规范

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

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

  • 包名尽量短小,并且使用全部小写字母,不推荐使用下划线。例如,com.lnu、 com.bigdata、 com.learn.base 都是被推荐使用的包名称,而 com_lnu 则是不被推荐使用的。

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

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

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

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

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/m0_68192925/article/details/128886814