语法规范
# 语法规范
# 标识符
所谓的标识符就是对变量、常量、函数、类等对象起的名字。
Python 对于标识符的命名有如下规定:
# 1)第一个字符必须是字母表中的字母或下划线 _
值得注意的是,在 Python 中以下划线开头的标识符通常都有特殊意义:
- 以单下划线开头的变量,例如
_foo
代表禁止外部访问的类成员,仅供类内部使用,外部如有需要得通过类另外提供的接口进行访问。同时不能用from xxx import *
导入。 - 以双下划线开头的,例如
__foo
代表类的私有成员,Python 解释器会自动将名称如__method
扩展为_ClassName__method
,这是为了防止在子类中意外覆盖父类的方法。 - 以双下划线开头和结尾的是 Python 里特殊方法专用的标识,如
__init__()
代表类的构造函数。
# 2)标识符的其他的部分由字母、数字和下划线组成
# 3)标识符对大小写敏感
事实上 Python 语言在任何场景都严格区分大小写。
# 4)变量名全部小写,常量名全部大写
这条不能算语法层面的要求,而是代码规范的要求。
# 5)函数和方法名用小写加下划线
也不是语法强制,而是代码规范,我们在定义一个函数或者方法的名字的时候,应尽量用类似 get_students
、add_student
、update_student
之类的命名方式。
# 6)类名用大写驼峰
同样也不是语法强制,而是代码规范。所谓的大写驼峰指的是每个单词的首字母大写。例如 Student
、StudentConfig
等等。
# 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']
2
3
4
# 注释
# 单行注释
以符号 #
为单行注释的开始,从它往后到本行的末尾,都是注释内容。
# 多行注释
Python 没有真正意义上的多行注释(块注释)语法。你只能在每行的开头打上 #
号,然后在有多行注释内容时,使用多个单行注释。
# 第一行注释
# 第二行注释
# 第三行注释
def func():
print('hello!')
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
需要强调的是这类注释必须紧跟在定义体下面,不能在任意位置。
# 代码头两行
很多时候,我们在一些 Python 脚本文件的开头都能看到类似的以 #
开头的这样两行代码,它们不是注释,是一些设定。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2
第一行:用于指定运行该脚本的 Python 解释器,Linux 专用,Windows 不需要。env 方式下,系统会自动使用环境变量里指向的 Python。
在 Linux 下使用形如 ./test.py
的方式执行脚本时,该行设置生效;在使用类似 python test.py
或者 python3 test.py
的执行方式时,这一行不起作用。
第二行:代码的编码方式。不是程序要处理的数据的编码方式,而是程序自己本身的字符编码。在 Python3 中,已经全面支持 Unicode,默认以 UTF-8 编码,我们不用再纠结中文和乱码的问题,所以本行其实可以不需要。
PS:这里的 -*-
没有特别的作用,仅是为了美观好看的装饰。
(完)