写代码就像写字一样,为什么有的人写的字十分漂亮,而有的人写的字过后连自己都不认识,最主要还是从一开始是否对自己严格要求。从现在开始就当自己是个初学者,把代码写漂亮点。以下截取了部分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规范的更多相关文章

  1. Python 常用PEP8规范

    目录 目录 代码布局 缩进 最大行宽 空行 模块导入 字符串 表达式和语句中的空格 注释 命名规则 编程建议 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPL ...

  2. python的 pep8 规范(看完你会感谢我的!!!)

    1 缩进与换行 每级缩进使用四个空格 2 限制每行的最大长度为79个字符 3 空行 顶层函数和类之间使用两个空行 类的方法之间用一个空行 在函数中使用空行表示不同逻辑段落 4 导入位于文件的顶部 5 ...

  3. python之PEP8规范

    比较需要注意的 缩进 每一级缩进使用4个空格. 续行应该与其包裹元素对齐,要么使用圆括号.方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3.当使用挂行缩进时,应该考虑到第一行不应该有参数 ...

  4. Pycharm配置autopep8让Python代码更符合pep8规范

    一.何为pep8? PEP 8官方文档 -- Style Guide for Python Code PEP8中文翻译(转) 二.Pycharm中配置pep8 Pycharm本身是有pep8风格检测的 ...

  5. Python 常用 PEP8 编码规范

    Python 常用 PEP8 编码规范 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPLE: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  6. 不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8

    不是程序员,代码也不能太丑!python官方书写规范:任何人都该了解的 pep8 简介:为什么要强调 书写规范 ?这其实并不关乎"美丑",而是为了 更高的效率(代码阅读.开发.维护 ...

  7. PEP8 规范

    Python PEP8 编码规范中文版   原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style ...

  8. 【转】PEP8 规范

    [转]PEP8 规范 Python PEP8 编码规范中文版   原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 ...

  9. CHENGDU1-Python编程语言和PEP8规范

    CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...

随机推荐

  1. Java之Calendar类

    Calendar类概述 java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时 ...

  2. 【洛谷5794】[THUSC2015] 解密运算(模拟)

    点此看题面 大致题意: 对于一个字符串,我们在其末尾添加一个'.',将字符串视作一个环,则可以从\(n+1\)个位置断开得到\(n+1\)个新串.现将这\(n+1\)个新串按字典序排序('.'的字典序 ...

  3. Linux下动态切换EHCI控制器下端口的速率(即切换为12M)

    在sys目录下找到对应的控制器 例如:/sys/devices/platform/soc/ehci,直接操作该目录下的companion echo 1  > companion  将port1设 ...

  4. SpringBoot源码学习系列之Locale自动配置

    目录 1.spring.messages.cache-duration 2.LocaleResolver 的方法名必须为localeResolver 3.默认LocaleResolver 4.指定默认 ...

  5. mkdir函数 (创建文件夹函数)

    mkdir函数 #include <stdio.h> int main(){ mkdir("C:\\Users\\admin\\desktop\\test"); ; }

  6. C# 使用NAudio合并mp3、wav音频文件

    1.什么是wav格式    WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windo ...

  7. Repeater嵌套

    我们自己观察 这是由两个重复项组成的 重复项包含重复项 而重复项的数据源是由订单号决定 即父Repeater的某数据源字段 protected void Repeater1_ItemDataBound ...

  8. React 从入门到进阶之路(一)

    在开始 React 学习之前我们先进入官网 https://react.docschina.org/ 看看官方对 React 的解释:React 是用于构建用户界面的JavaScript 库.我们只需 ...

  9. window.innerHeight和document.documentElement.clientHeight区别

    今天有人问我这个问题,做了个小例子来记录一下子. 首先这两个都是获取可视区域的高度,那他们有什么区别呢 1.window.innerHeight属于BOM(浏览器对象模型),而document.doc ...

  10. 解决NuGet下载太慢的问题

    以下载CefSharp.Wpf v57.0.0版本为例: 1.打开NuGet官网:https://www.nuget.org/ 2.输入CefSharp.Wpf,点击查询,如下所示: 3.确认版本正确 ...