我的 Python 编码规范
1. 前言
说起编码规范,很多文章都会提到PEP8这个规范。PEP是Python Enhancement Proposal(Python 增强建议书)的简写。PEP8整个文档引用了很多其他标准,看起来挺复杂的,我从来没有完整读下来过。好在龟叔说过,A Foolish Consistency is the Hobgoblin of Little Minds(尽信书,不如无书),只要保持一致性、可读性,就是一个好的规范。基于PEP8规范的原则,结合开发团队在工作中的养成的习惯,我整理了一份实用的编码规范,推荐给初学者。
2. python 文件的组成
为了便于描述,先上一个 demo,
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""通常这里是关于本文档的说明(docstring),须以半角的句号、 问号或惊叹号结尾!
本行之前应当空一行,继续完成关于本文档的说明
如果文档说明可以在一行内结束,结尾的三个双引号不需要换行;否则,就要像下面这样
"""
import os, time
import datetime
import math
import numpy as np
import xlrd, xlwt, xlutils
import youth_mongodb
import youth_curl
BASE_PATH = r"d:\YouthGit"
LOG_FILE = u"运行日志.txt"
class GameRoom(object): """对局室""" def __init__(self, name, limit=100, **kwds): """构造函数! name 对局室名字 limit 人数上限 kwds 参数字典 """ pass
def craete_and_start(): """创建并启动对局室""" pass
if __name__ == '__main__': # 开启游戏服务 start()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
Linux 平台上,一个 python 源码文件应该以下部分组成。Windows 平台上,可以省略第一项。
- 解释器声明
- 编码格式声明
- 模块注释或文档字符串
- 模块导入
- 常量和全局变量声明
- 顶级定义(函数或类定义)
- 执行代码
3. 编码格式声明
通常,编码格式声明是必需的。如果 python 源码文件没有声明编码格式,python 解释器会默认使用 ASCII 编码,一旦源码文件包含非ASCII编码的字符,python 解释器就会报错。以 UTF-8 为例,以下两种编码格式声明都是合乎规则的。
# -*- coding: utf-8 -*-
- 1
# coding = utf-8
- 1
我一直 UTF-8 编码格式,喜欢使用第一种声明方式。
Windows 平台上,编码格式声明必须位于 python 文件的第一行。Linux 平台上,编码格式声明通常位于 python 文件的第二行,第一行是 python 解释器的路径声明。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
- 1
- 2
4. 缩进
统一使用 4 个空格进行缩进。绝对不要用tab, 也不要tab和空格混用。对于行连接的情况,我一般使用4空格的悬挂式缩进。例如:
var_dict = { 'name': 'xufive', 'mail': 'xufive@sdysit.com'
}
- 1
- 2
- 3
- 4
5. 引号
引号使用的一般性原则:
- 自然语言使用双引号
- 机器标识使用单引号
- 正则表达式使用双引号
- 文档字符串 (docstring) 使用三个双引号
6. 注释
#号后空一格,段落件用空行分开(同样需要#号):
# 块注释 # 块注释 # # 块注释 # 块注释
- 1
- 2
- 3
- 4
- 5
行内注释,至少使用两个空格和语句分开:
age += 1 # 年龄增加一岁
- 1
比较重要的注释段, 使用多个等号隔开, 可以更加醒目, 突出重要性:
server= gogame(room, options) # ===================================== # 请勿在此处倾倒垃圾!!! # ===================================== if __name__ == '__main__': server.run()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
7. 空行
空行使用的一般性原则:
- 编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行
- 顶级定义之间空两行,方法定义之间空一行
- 在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行
8. 空格
空格使用的一般性原则:
- 在二元运算符两边各空一格,算术操作符两边的空格可灵活使用,但两侧务必要保持一致
- 不要在逗号、分号、冒号前面加空格,但应该在它们后面加(除非在行尾)
- 函数的参数列表中,逗号之后要有空格
- 函数的参数列表中,默认值等号两边不要添加空格
- 左括号之后,右括号之前不要加添加空格
- 参数列表, 索引或切片的左括号前不应加空格
9. 文档字符串
文档字符串是包、模块、类或函数里的第一个语句。这些字符串可以通过对象的__doc__成员被自动提取,并且被pydoc所用。文档字符串的使用三重双引号(""")。如果文档字符串内容不能在一行内写完,首行须以句号、 问号或惊叹号结尾,接一空行,结束的三重双引号必须独占一行。
10. 导入模块
导入总应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。导入应该按照从最通用到最不通用的顺序分组,分组之间空一行:
- 标准库导入
- 第三方库导入
- 应用程序指定导入
应当避免使用以下的导入方法:
from math import *
- 1
11. 命名规范
命名建议遵循的一般性原则:
- 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线
- 类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
- 函数名一律小写,如有多个单词,用下划线隔开
- 私有函数可用一个下划线开头
- 变量名尽量小写, 如有多个单词,用下划线隔开
- 常量采用全大写,如有多个单词,使用下划线隔开
文章来源: xufive.blog.csdn.net,作者:天元浪子,版权归原作者所有,如需转载,请联系作者。
原文链接:xufive.blog.csdn.net/article/details/84957425
- 点赞
- 收藏
- 关注作者
评论(0)