语法规范


# 语法规范

# 标识符

所谓的标识符就是对变量、常量、函数、类等对象起的名字。

Python 对于标识符的命名有如下规定:

# 1)第一个字符必须是字母表中的字母或下划线 _

值得注意的是,在 Python 中以下划线开头的标识符通常都有特殊意义:

  • 以单下划线开头的变量,例如 _foo 代表禁止外部访问的类成员,需通过类提供的接口进行访问,不能用 from xxx import * 导入。
  • 以双下划线开头的,例如 __foo 代表类的私有成员。
  • 以双下划线开头和结尾的是 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。

# 2)标识符的其他的部分由字母、数字和下划线组成

# 3)标识符对大小写敏感

事实上 Python 语言在任何场景都严格区分大小写。

# 4)变量名全部小写,常量名全部大写

这条不能算语法层面的要求,而是代码规范的要求。

# 5)函数和方法名用小写加下划线

也不是语法强制,而是代码规范,我们在定义一个函数或者方法的名字的时候,应尽量用类似 get_studentsadd_studentupdate_student 之类的命名方式。

# 6)类名用大写驼峰

同样也不是语法强制,而是代码规范。所谓的大写驼峰指的是每个单词的首字母大写。例如 StudentStudentConfig 等等。

# 7)模块和包的名字用小写

模块和包的名字尽量用小写,并且不能和标准库以及著名的第三方库同名。

# 保留字

Python 保留字,也叫关键字,是 Python 语言官方确定的用作语法功能的专用标识符,不能把它们用作任何自定义标识符名称。关键字只包含小写字母。

Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

import keyword

print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
1
2
3
4

# 注释

# 单行注释

以符号 # 为单行注释的开始,从它往后到本行的末尾,都是注释内容。

# 多行注释

Python 没有真正意义上的多行注释(块注释)语法。你只能在每行的开头打上 # 号,然后在有多行注释内容时,使用多个单行注释。

# 第一行注释
# 第二行注释
# 第三行注释
def func():
    print('hello!')
1
2
3
4
5

# 文件注释

在某些特定的位置,用三引号包括起来的部分,也被当做注释。但是,这种注释有专门的作用,用于为 __doc__ 提供文档内容,这些内容可以通过现成的工具,自动收集起来,形成帮助文档。

例如,函数和类的说明文档:

def func(a, b):
    """
    这个是函数的说明文档。
    :param a: 加数
    :param b: 加数
    :return: 和
    """
    return a + b


class Foo:
    """
    这个类初始化了一个age变量
    """
    def __init__(self, age):
        self.age = age
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

需要强调的是这类注释必须紧跟在定义体下面,不能在任意位置

# 代码头两行

很多时候,我们在一些 Python 脚本文件的开头都能看到类似的以 # 开头的这样两行代码,它们不是注释,是一些设定。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
1
2

第一行:用于指定运行该脚本的 Python 解释器,Linux 专用,Windows 不需要。env 方式下,系统会自动使用环境变量里指向的 Python。

在 Linux 下使用形如 ./test.py 的方式执行脚本时,该行设置生效;在使用类似 python test.py 或者 python3 test.py的执行方式时,这一行不起作用。

第二行:代码的编码方式。不是程序要处理的数据的编码方式,而是程序自己本身的字符编码。在 Python3 中,已经全面支持 Unicode,默认以 UTF-8 编码,我们不用再纠结中文和乱码的问题,所以本行其实可以不需要。

PS:这里的 -*- 没有特别的作用,仅是为了美观好看的装饰。

(完)