Python - 部分PEP8规范
写代码就像写字一样,为什么有的人写的字十分漂亮,而有的人写的字过后连自己都不认识,最主要还是从一开始是否对自己严格要求。从现在开始就当自己是个初学者,把代码写漂亮点。以下截取了部分PEP8代码规范,里面掺杂了一些个人中文注解。
想看英文原版,就点击 https://legacy.python.org/dev/peps/pep-0008/
想看中文翻译版,就点击 https://blog.csdn.net/ratsniper/article/details/78954852
缩进
# 函数参数应垂直对齐
Yes:
foo = long_function_name(var_one, var_two,
var_three, var_four) No:
foo = long_function_name(var_one, var_two,
var_three, var_four)
# 使用更多的缩进,与其它行分开
Yes:
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one) No:
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# 阔号后面换行需要增加缩进
Yes:
foo = long_function_name(
var_one, var_two,
var_three, var_four)
Yes:
以下三种都行
if条件换行不增加额外的空格
if (this_is_one_thing and
that_is_another_thing):
do_something()
# 增加一个注释,在能提供语法高亮的编辑器中可以有一些区分
if (this_is_one_thing and
that_is_another_thing):
# Since both conditions are true, we can frobnicate.
do_something()
# if条件换行增加额外的空格
if (this_is_one_thing
and that_is_another_thing):
do_something()
Yes:
以下四种都行
对于闭括号,可以跟参数保持对齐,像前两种;也可以跟变量保持对齐,像后两种
my_list = [
1, 2, 3,
4, 5, 6,
] result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
) my_list = [
1, 2, 3,
4, 5, 6,
] result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
# 代码的宽度应该限制在79个字符内,较长的代码行选择在小括号,中括号以及大括号中的隐式续行方式。这种方式应该优先使用,而不是使用反斜杠续行。
# 但反斜杠有时依然很有用。比如,比较长的,多个with状态语句,不能使用隐式续行,所以反斜杠是可以接受的
with open('/path/to/some/file/you/want/to/read') as file_1, \
open('/path/to/some/file/being/written', 'w') as file_2:
file_2.write(file_1.read())
# 运算符应该在换行的前面
Yes:
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)
No:
income = (gross_wages +
taxable_interest +
(dividends - qualified_dividends) -
ira_deduction -
student_loan_interest)
空行
# 顶层的类或函数用两个空行隔开,类里面的方法用一个空行隔开,以下为示例
class xxx(object):
pass class yyy(object):
"""
comment
"""
def a(self): # comment
""" comment """
pass def c(self): # comment
""" comment """
pass
导入
# 不要一行导入多个模块
Yes:
import os
import sys
No:
import sys, os
# 但是可以这样
from subprocess import Popen, PIPE
导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。
导入应该按照以下顺序分组:
标准库导入
相关第三方库导入
本地应用/库特定导入
你应该在每一组导入之间加入空行
导入尽量使用绝对路径
import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example
显示的指定相对导入路径是使用绝对路径的一个可接受的替代方案,特别是在处理使用绝对路径导入不必要冗长的复杂包布局时。相对路径导入注意事项https://www.cnblogs.com/hhh5460/p/6681601.html
from . import sibling #加载当前目录下的sibling.py文件
from .sibling import example #加载当前目录下sibling.py的example
双下划线的变量应出现在导入前,但除了from __future__ imports
"""This is the example module. This module does stuff.
""" from __future__ import barry_as_FLUFL __all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles' import os
import sys
引号
在Python中,单引号和双引号字符串是相同的。PEP不会为这个给出建议。选择一条规则并坚持使用下去。当一个字符串中包含单引号或者双引号字符的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。
对于三引号字符串,总是使用双引号字符来与PEP 257中的文档字符串约定保持一致。
空格
紧跟括号不要有空格
Yes: spam(ham[1], {eggs: 2})
No: spam( ham[ 1 ], { eggs: 2 } )
逗号冒号分号前不要有空格
Yes: if x == 4: print x, y; x, y = y, x
No: if x == 4 : print x , y ; x , y = y , x
冒号在切片中就像二元运算符,在两边应该有相同数量的空格(把它当做优先级最低的操作符)。在扩展的切片操作中,所有的冒号必须有相同的间距。例外情况:当一个切片参数被省略时,空格就被省略了。
Yes:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
No:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : upper]
ham[ : upper]
紧贴在函数参数的左括号之前
Yes: spam(1)
No: spam (1)
紧贴索引或者切片的左括号之前
Yes: dct['key'] = lst[index]
No: dct ['key'] = lst [index]
变量赋值,左右各一个等号
Yes:
x = 1
y = 2
long_variable = 3
No:
x = 1
y = 2
long_variable = 3
避免在尾部添加空格。因为尾部的空格通常都看不见,会产生混乱:比如,一个反斜杠后面跟一个空格的换行符,不算续行标记
总是在二元运算符两边加一个空格:赋值(=),增量赋值(+=,-=),比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not)
如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格
Yes:
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
No:
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
在关键字参数或者默认参数值的时候,不要在=附近加上空格。
Yes:
def complex(real, imag=0.0):
return magic(r=real, i=imag)
No:
def complex(real, imag = 0.0):
return magic(r = real, i = imag)
一行一句
Yes:
if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()
No:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()
注释
注释开头的单词首字母大写,一般使用#加一个空格开头
行内注释一般与代码隔开两个空格
命名规范
模块应该用简短全小写的名字,如果为了提升可读性,下划线也是可以用的。Python包名也应该使用简短全小写的名字,但不建议用下划线。
类名应该用首字母大写的名字
异常名,因为异常一般都是类,所有类的命名方法在这里也适用。然而,你需要在异常名后面加上“Error”后缀
函数名应该小写,如果想提高可读性可以用下划线分隔
普通变量全小写和_,常量用全大写和_
函数和方法参数
始终要将self作为实例方法的的第一个参数。
始终要将cls作为类静态方法的第一个参数。
如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此class_比clss更好。
Python - 部分PEP8规范的更多相关文章
- Python 常用PEP8规范
目录 目录 代码布局 缩进 最大行宽 空行 模块导入 字符串 表达式和语句中的空格 注释 命名规则 编程建议 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPL ...
- python的 pep8 规范(看完你会感谢我的!!!)
1 缩进与换行 每级缩进使用四个空格 2 限制每行的最大长度为79个字符 3 空行 顶层函数和类之间使用两个空行 类的方法之间用一个空行 在函数中使用空行表示不同逻辑段落 4 导入位于文件的顶部 5 ...
- python之PEP8规范
比较需要注意的 缩进 每一级缩进使用4个空格. 续行应该与其包裹元素对齐,要么使用圆括号.方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3.当使用挂行缩进时,应该考虑到第一行不应该有参数 ...
- Pycharm配置autopep8让Python代码更符合pep8规范
一.何为pep8? PEP 8官方文档 -- Style Guide for Python Code PEP8中文翻译(转) 二.Pycharm中配置pep8 Pycharm本身是有pep8风格检测的 ...
- Python 常用 PEP8 编码规范
Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPLE: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- 不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8
不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8 简介:为什么要强调 书写规范 ?这其实并不关乎"美丑",而是为了 更高的效率(代码阅读.开发.维护 ...
- PEP8 规范
Python PEP8 编码规范中文版 原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style ...
- 【转】PEP8 规范
[转]PEP8 规范 Python PEP8 编码规范中文版 原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 ...
- CHENGDU1-Python编程语言和PEP8规范
CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...
随机推荐
- 【oracle】PLS-00103: 出现符号 "end-of-file"
begin xxxxx end; 修改xxxxx为xxxxx:就好了
- 线段树模板加模板题POJ3468
POJ - 3468 整理了个新的线段树的模板,暑期集训的时候学长给的模板,每个节点单单存了自己所要维护的内容,还是少了点.导致在写pushdown的时候,len我会有点难写.所以就整理个新的模板. ...
- 荧屏弹幕_新增h5requestAnimationFrame实现
所有的页面逻辑也是比较简单,用原生js实现,封装也是比较简单!要让页面效果更为炫酷,则可去引入相应的css,背景图片自己去img/下下载引入喔! HTML页面 <!doctype html> ...
- docker cp命令出错问题
docker cp 4e6:/etc/nginx/nginx.conf /home/nginx/conf 使用docker在复制官方nginx容器的conf文件时,发生了错误. Error respo ...
- Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
前言 相比与Xilinx和Altera在国内的市场,Microsemi的FPGA在国内应用很少很少,网上几乎没有详细的教程,刚开始使用时,遇到了各种问题,自己也走了不少弯路.本系列教程以Libero ...
- 浅谈Httpmodules
HttpModule是ASP.NET过滤器,可以理解为HTTP请求的必经之地我们只要实现IHttpModule接口,就可以取代HttpModule namespace BookShop.Handler ...
- 多线程六 同步容器&并发容器
同步容器(使用的是synchronized,并且不一定是百分百安全) 本篇续 -- 线程之间的通信 ,介绍java提供的并发集合,既然正确的使用wait和notify比较困难,java平台为我们提供了 ...
- 【Luogu P3994】高速公路
Problem Background \(C\) 国拥有一张四通八达的高速公路网树,其中有 \(n\) 个城市,城市之间由一共 \(n-1\) 条高速公路连接.除了首都 \(1\) 号城市,每个城市都 ...
- 解决NuGet下载太慢的问题
以下载CefSharp.Wpf v57.0.0版本为例: 1.打开NuGet官网:https://www.nuget.org/ 2.输入CefSharp.Wpf,点击查询,如下所示: 3.确认版本正确 ...
- 爬虫爬取m3u8视频文件
一.m3u8视频格式 一般m3u8文件和 视频流ts文件放在同一目录 而m3u8文件格式存放的一般都是ts 文件的一个列表 二.根据m3u8视频存放以及写法的规律 思路 我们一般网站上能找到的m3u8 ...