python代码PEP8规范示例
""" 文档字符串 docstring, 是 package, module, class, method, function 级别的注释,可以通过 doc 成员访问到,注释内容在一对双引号 优先使用英文写注释,英文不好全部写中文,强行使用英文可能导致大家都看不懂 1.所有 import 尽量放在文件开头,在 docstring 下面,其他变量定义的上面 2.不要使用 from foo import * 3.import 需要分组,每组之间一个空行,每个分组内的顺序尽量采用字典序,分组顺序是: 3.1 标准库 3.2 第三方库 3.3 本项目的 package 和 module 4.不要使用隐式的相对导入(implicit relative imports) 可以使用显示的相对导入(explicit relative imports),如 from ..utils import parse 最好使用全路径导入(absolute imports) 5.同一个 package/module 下的内容可以写一起 6.为了避免可能出现的命名冲突,可以使用 as 或导入上一级命名空间 """ import os import sys import db from flask import Flask, render_template, jsonify from collections import defaultdict as my_dict # 这是一个正确注释,#后面需要一个空格,如下为特例 #!/usr/bin/python # 操作符两端加一个空格,如 +, -, *, /, |, &, = a = 1 + 2 b = 10 - 1 c = 1 * 2 d = 10 / 5 e = 10 | 20 f = 5 & 6 # 在参数列表里的 = 两端不需要空格 def add(num1=1, num2=2): return num1 + num2 # function 和 class 顶上两个空行 class MyClass(object): def my_function1(self): pass # class 的 method 之间一个空行 def my_function2(self): # 函数内逻辑无关的段落之间空一行,不要过度使用空行 # 逻辑1 # 逻辑2 # 逻辑3 return # 不要把多个语句写在一行,然后用 ; 隔开 add(1, 2) add(3, 4) # 括号((), {}, [])内的两端不需要空格 tmp = ('name1', 'name2') # if/for/while 语句中,即使执行语句只有一句,也要另起一行 if True: print('另起一行') # 每一行代码控制在80字符以内,例子如下: # 面对抢票软件的花样,有专家提醒,虽然理论上抢票软件比人工刷新更快,但12306已经屏蔽了许多抢票端口并推出了“官方抢票” # 的候补功能——也就是,当没有余票时,12306会在车次列表中出现“候补”的字样。旅客可根据需求选择车次、席别,在成功支付 # 候补预付款后,如果有匹配需求的车票,系统会自动生成已支付订单,并退回差额;如果没有,系统将全额退还预付款。那么,这个 # 候补功能和市面上的抢票软件谁更好用?如果用抢票软件,又有哪些套路要小心? # 使用 \ 或 () 控制换行 def foo(tmp1='aa', tmp2='bb', tmp3='cc', tmp4='dd', tmp5='ee', tmp6='ff', tmp7='gg', tmp8='hh'): pass # 使用有意义的,英文单词或词组,绝对不要使用汉语拼音 address = 'suzhou' # package/module 名中不要出现 - # 不要轻易使用 try/except,except 后面需要指定捕捉的异常,裸露的 except # 会捕捉所有异常,意味着会隐藏潜在的问题 # 可以有多个 except 语句,捕捉多种异常,分别做异常处理 age = '111' try: age = int(age) except(TypeError, ValueError): render_template() # 使用 finally 子句来处理一些收尾操作 try: db.session.commit() except sqlalchemy.exc.SQLAlchemyError: # 或者更具体的异常 db.session.rollback() finally: db.session.close() # 显示的写明父类,如果不是继承自别的类,就继承自 object 类 # 使用 super 调用父类的方法 # 支持多继承,即同时有多个父类,建议使用 Mixin class MyClass(object): pass