1.编码

  1. 如无特殊情况,文件一律使用utf-8编码
  2. 如无特殊情况,文件头部必须添加# -*- coding:utf-8 -*- 标志

2.代码

  1. 统一使用四个空格缩进
  2. 每行代码不超过80个字符
  3. 自然语言使用双引号,如input里面,或者错误信息,正则表达式使用原生的双引号r" ",
  4. 机器标识使用单引号,如dict里面的key,因此代码里面多数应该使用单引号。
  5. 文档字符串使用三个双引号。""" """

3.空行

  1. 模块级函数和类定义之间空两行
  2. 类成员函数之间空一行
  3. 可以使用多个空行分隔多组相关函数
  4. 函数中可以用空行分隔出逻辑相关的代码
class A:

    def __init__(self):
pass def hello(self):
pass def main():
pass

4.import语句

  1. import 语句应当分行书写
  2. import语句应当使用absolute import
  3. import语句应当放在文件头部,置于模块说明及docstring之后,全局变量之前
  4. import语句应该按照顺序排列,每组之间用一个空格分隔,按照内置模块,第三方模块,自己所写的模块调用顺序,同时每组内部按照字母表顺序排列
#Right
import os
import sys from subprocess import Popen, PIPE from foo.bar import Bar #False
import os, sys
from ..bar import Bar

5.空格

在二元运算符两边各空一格:[=, - ,+ =, > , in , is ,not , and]

i = i + 1
x = x * x + 2
c = (a + b) * (a - b)

函数的参数列表中,","之后要有空格,默认值等号两边不要添加空格,左括号之后,右括号之前不要有空格

def complex(real, image=0):
pass

6.换行

python支持括号内的换行,这时有两种情况:

1.第二行缩进到括号的起始处

2.第二行缩进四个空格,适用于起始括号就换行的情形

a = list(var1, var2,
var3) a=list(
var1,
var2,
var3)

7.注释

#号后需空一格,不要使用无意义的注释

x = x + 1 # 边框加粗一个像素

8.docstring

1.所有公共模块,函数,类,方法都应该有docstring。

9.命名规范

  • 应避免使用小写字母l,大写字母O或I单独作为一个变量,以区分数字1和0.
  • 包和模块使用全小写命名,,尽量不要使用下划线
  • 类名使用CamelClass命名风格,内部类可用一个下划线开头
  • 函数使用下划线分隔的小写命名
  • 常量使用以下划线分隔的大写命名
MAX_OVERFLOW = 100

class FooBar:

    def foo_bar():
pass
  • 单字符命名应该尽量避免,除了计数器和迭代器
  • 模块名尽量小写命名,首字母小写,尽量不要使用下划线(除非多个单词且数量不多的情况)
  • 类名:首字母大写,私有类可以用一个下划线开头
  • 将相关的类和顶级函数放在同一个模块中,没必要限制一个类一个模块
  • 函数名:一律小写,如有多个单词一律用下划线隔开
  • 私有函数在函数名前加一个下划线
  • 变量名尽量小写,如有多个单词,用下划线隔开
  • 常量采用全大写,如有多个单词,使用下划线隔开
#False
s = "Hello World"
l = 1
import Decoder #True
class Farm():
class Animal():
class _PrivateFarm():
def run():
count = 0
school_name = "xidian"
MAX_CLIENT = 100

10.程序设计规范

1.尽量不要直接将代码写在模块顶层,在执行主程序之前总是检查:if __name__ = '__main__',这样模块被导入主程序时就不会被执行了

#wrong
do_something() #right
def main():
do_something(): if __name__ == '__main__':
main()

所有的顶层代码在模块导入时都会被执行,要小心不要去调用函数,创建对象,或者执行哪些不该被执行的操作

尽量不要用+号拼接字符串,使用join函数拼接

在不复杂的情况下,尽量多用列表生成式,可以是代码更清晰

尽量使用map和filter等内置函数而不是自己去写循环

正则表达式之前一律加r,正则表达式使用之前一律编译好。

最新文章

  1. 从Maya中把模型搬运至网页的过程
  2. libsvm数据处理初略流程
  3. asp.net MVC code first Migrations : Model 同步到DB中
  4. java类型占用字节数&类型转换
  5. 接收新信息,在会话中看不到(thread表数据插入/更新失败)
  6. SQL UNION 和 UNION ALL 操作符
  7. 工作的准备:atoi,itoa,strcpy,memcpy,strcmp,二分查找,strcat
  8. javascript 操作元素属性的方法
  9. 传智播客C/C++学院年薪24-50万招聘C/C++讲师
  10. Redis性能问题排查解决手册
  11. springboot 入门三- 读取配置信息二(读取属性文件方式)
  12. CentOS7.3 ARM虚拟机扩容系统磁盘
  13. Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
  14. Java学习笔记49(DBUtils工具类二)
  15. 【API知识】类型转换工具ConvertUtils引发的思考
  16. Jmeter 常用断言使用
  17. Exp7:网络欺诈防范
  18. Selenium - Xpath 使用方法
  19. linux利用软件raid搭建iscsi存储
  20. 通过unixODBC访问PostgreSQL数据库

热门文章

  1. Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  2. router-link动态赋值
  3. NOIP2018崩崩记
  4. c++继承知识点小结
  5. iPhone X 底部菜单走光的问题
  6. 移动端Web适配单位rem的坑,oppo r9手机出现错位bug
  7. sde中的shp数据无法编辑
  8. pyd打包补充
  9. js 给链接 url或href或js、css、图片等解决浏览器缓存
  10. alert提示框去掉域名