你写的Python代码规范吗?

Irene181
• 阅读 2107

你写的Python代码规范吗?

总第141篇/张俊红

1.什么是PEP8

PEP 是 Python Enhancement Proposals 的缩写,直译过来就是「Python增强建议书」也可叫做「Python改进建议书」,说的直白点就是Python相关的一些文档,主要用来传递某些信息,这些信息包括某个通知亦或是某个新的规范。关于更深层次的概念,大家有兴趣的可以自行去了解。

PEP 后面的数字从0开始一直累加,不同的数字代表不同的文档,我们今天介绍的是 PEP8,这个文档主要是用来规范 Python 代码的写法。

你写的Python代码规范吗?

2.常用的标准

PEP8 里面有很多规范,作为一个业余程序员主要分享以下一些比较常用的规范。

2.1缩进

我们知道在写 if条件、for循环、while循环、函数等语句时都是需要缩进的,正常来说缩进只要有缩进空格就行,具体缩进几个都行,所谓的无规矩不成方圆,想象一下,你习惯缩进3个,我习惯缩进5个,彼此交换代码的时候,那代码看起来是有多乱。为了避免这种局面的出现,PEP8 就建议缩进统一用4个空格。

# 建议这样  
if a > b:  
    print("a is max")  


# 不建议这样  
if a > b:  
 print("a is max")  

还有尽量不要使用 Tab 键代替空格。

2.2最长字符

Python中一行的字符数限制为79个,但是有的时候会超过79,这个时候我们就需要进行换行,在换行的时候优先使用小括号,中括号以及大括号中的隐式续行方式,而不是使用反斜杠进行续行。比如下面的运算符遇上换行符中的例子。

当我们使用括号进行续行时,就涉及到不同行与行的对齐情况。

在多行结构中右括号可以与内容对齐单独起一行作为最后一行的第一个字符。

my_list = [  
    1,2,3,  
    4,5,6  
    ]  

或者也可以与多行结构的第一行第一个字符对齐。

my_list = [  
    1,2,3,  
    4,5,6  
]  

2.3运算符遇上换行

有的时候多个变量名进行运算,在一行放不下时,这个时候就需要换行,那么当运算符遇上换行时我们该怎么换呢?建议在运算符的前面进行换行。

# 建议这样  
income = (income1   
          + income2  
          - cost1  
          - cost2)  


# 不建议这样  
income = (income1 +   
          income2 -   
          cost1 -   
          cost2) 

2.4空白行

函数和类的定义,前后用两个空行隔开,这个就类似于我们在 word 里面编写文档,段前段后留空行。

在前面的举例中,建议这样和不建议这样就可以当作两个函数,这些函数之间是留两空白行。

2.5空格

合适的空格会增加可阅读性,比如英文和中文之间要留有一个空格,这样看起来会相对比较舒服。在 Python 代码中亦是如此。但是空格不可滥用。

建议在二元运算符两边加一个空格:如赋值(=),增量赋值(+=,-=),比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not)。

# 建议这样  
a = 1  
a = 1+2  
a > b  


# 不建议这样  
a=1  
a=1+2  
a>b  

但是不建议在小括号,中括号或者大括号之后;逗号、分号或者冒号之前添加空格。

# 建议这样  
np.array([1,2,3])  

# 不建议这样  
np.array( [1,2,3] )  
np.array([1 ,2 ,3])  

在给某个函数参数传入参数值时,不建议使用空格。

# 建议这样  
plt.label(label="test_title")  

# 不建议这样  
plt.label(label = "test_title")  

2.6注释

代码注释可以帮助我们很快的理清代码,但是前提是注释写的够好够清晰,要不然不仅不会起到帮助的作用,反而会扰乱视线。关于注释主要有如下规则:

注释应该是完整一句话,如果一个注释是一个短语或简短的一句话,第一个单词应该大写。

如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成。并且每句话结束都有个句号。

行内注释是与代码写在同一行的注释,行内注释要和代码保留至少两个空格分隔。注释由#和一个空格开始。

x = max(a,b)  # select big one  

2.7模块导入

我们知道 Python 中有很多现成的模块可以供我们使用,在使用之前我们需要对模块进行导入,导入模块的时候我们也需要遵循相应的规则。

同时导入多个库的时候,建议分开不同的行进行导入。

# 建议这样  
import pandas  
import numpy  


# 不建议这样  
import pandas,numpy  

且导入模块的代码总是位于代码的最开始部分,在模块注释和文档字符串之后,在模块的全局变量与常量之前。

2.8命名规范

在 Python 里面会涉及到很多名字,模块名、变量名、函数名、类名。这就和我们人名字一样,都是有一定讲究的。

不要以 Python 中的关键字作为变量名,比如 sum、def、list 等。

不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。
在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替。

函数名应该小写,如果想提高可读性可以用下划线分隔。

3.在Jupyter_notebook使用

上面讲了几种规范,我们可以严格按照上面的规范去写代码,按照规范去做,总觉得会有种束缚,不太舒服,可是不按照规范去写,写出来的代码确实不太美观有不易读,那可怎么办呢?有没有一种工具可以帮助我们把不规范的代码直接更改成 PEP8 的规范呢?答案是有,那就是 Autopep8 模块。

首先我们需要去安装一下这个模块,使用如下命令:

pip install Autopep8  

安装好 Autopep8 模块以后我们还需要安装一个 jupyter_contrib_nbextensions 的插件,这个插件是 jupyter_notebook 中的一个插件,关于这个插件的安装在我前面的文章写过为jupyter_notebook增加目录Jupyter_notebook中用的都是这一个插件。

安装好插件以后,我们来到 Nbextensions 部分,然后把 Autopep8 打勾。这个时候就可以在 Jupyter_notebook 中使用 PEP8 规范了。

你写的Python代码规范吗?

那具体该怎么用呢?选中你要规范化的代码,然后点击菜单栏中的「小锤子」,即可完成代码规范,就是这么简单。

你写的Python代码规范吗?

先看个空格

# 规范前  
a=1+2  
---  
# 规范后  
a = 1+2  

再看个缩进

# 规范前  
def test_pep():  
   print("this is test")  
---  
# 规范后  
def test_pep():  
    print("this is test")  

PEP8 官网:
https://www.python.org/dev/peps/pep-0008/

PEP8 中文文档:
https://blog.csdn.net/ratsniper/article/details/78954852

想要学习更多网络爬虫知识,请点击阅读原文前往爬虫网站。

**-----**------**-----**---**** End **-----**--------**-----**-****

你写的Python代码规范吗?

往期精彩文章推荐:

你写的Python代码规范吗?

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/xefZ1HgVIR0nhqbIw_CheQ,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这