专栏首页墨鬓3大利器推荐,帮你写出规范漂亮的python代码
原创

3大利器推荐,帮你写出规范漂亮的python代码

Python学了好久,但是拿出来review的代码好像总是长的不够俊美,不够工整!因此标准化的代码规范就显得尤为重要。今天就来推荐3个利器,python界广泛认同的代码风格规范PEP8和两个超牛的工具pylint和black,分别用于代码风格规范检测和自动优化。

1

代码风格规范PEP8

首先讲一讲为什么要使用PEP8,我们先来看下面这段代码,在相关函数定义后,它是可以正常编译执行的,但是 这段代码的怪异风格无论是让别人阅读还是自己阅读都会感到很难受。这就需要一种普遍认同的代码风格规范,对行长度、缩进、多行表达式、变量 命名约定等内容进行统一,这就是PEP8的意义所在。

需要说明的是,PEP 8中有一些规范是为了方便阅读,而有一些规范实实在在地影响着代码的性能、容错率或者重 构难度。

比如上面这段代码,foo函数仅在满足条件的情况下有返回值、bar函数仅在不满足条件的情况下有返回值,这样的代码兼容性会比较差,正确的做法是保持代码一致性,函数中的返回语句都应该返回一个表达式,或者都不返回:

关于PEP8就简单介绍到这里,有兴趣的朋友可以自行查阅文档。当我们打开文档的时候会发现PEPE 8规范的内容非常多、非常细。

作为一名新手如果要一条条解读、一条条记住这些规定实在不是件容易的事情。然而养成良好的 代码编写习惯对新手来说又是十分重要的。

下面我们就正式进入主题,介绍两个简单又实用的代码自动化检测和优化工具,可以帮助我们快速规范自己的代码风格。

2

自动检测工具Pylint

Pylint 是一个检查违反 PEP8 规范和常见错误的库,它会自动查找不符合代码风格标准和有潜在问题的代码,并在控制台输出代码中违反规范和出现问题的相关信息。

1.安装与使用

与python的其他库一样,直接 pip install pylint 即可完成安装,另外anaconda自带pylint,所以如果安装过anaconda不必再单独安装此库。

pylint的使用也非常简单,最基本的用法直接在控制台输入 pylint 路径/模块名 即可对相关模块的代码风格规范 进行检查,检查结果会在控制台输出。

建议结合 pylint --help 的提示进行 学习和检索。介绍完pylint的基本情况,我们来结合一个实例进行详细说明。

2).实例演示说明

这里我找了自己刚学python时写的一段代码进行测试:

import pandas as pd

data = []
char_replace_dict = {':':'\t', '(':'(', ')':')', ',':','}

with open('xmq_survey.txt', 'r', encoding = 'utf-8') as file:
 for line in file.readlines():
   for key, value in char_replace_dict.items():
     line = line.replace(key, value)#原来这个是深度引用
     #这条代码比自己写的简介的多,也更python
   data.append(line)

with open('survey.txt', 'w', encoding = 'utf-8') as file:
 for line in data:
   file.write(line)

raw_data = pd.read_table('survey.txt', delimiter = '\t', header = None) #查看read_table函数的用法
raw_data.columns = ['Name', 'Raw Info']
raw_data.count()
print('successful')

(代码左右滑动)

乍一看好像没什么大问题,但是经过pylint检查后却给出了一堆问题提示(下图),我们来看检查结果,每行以大 写字母+冒号开头的信息都是一处反馈提示

其中开头的大写字母表示错误类型(主要有C\R\W\E\F几类);以逗号间隔的两个数字表示发现问题的位置(行和 列);其后是对问题的具体描述,括号里的内容称为message id,可以简单理解为错误类型的详细分类,通过

pylint --help-msg=<msg-id> 指令可以查看这个问题的的详细信息 。

C——违反代码风格标准;

R——代码结构较差;

W——关于细节的警告;

E——代码中存在错误;

F——导致Pylint无法继续运行的错误。

例如,我们执行 pylint --help-msg=trailing-newlines 指令,会在控制台输出对 trailing-newlines 这种问题的详细描述:

pylint输出的最后一行是其对本次检测的评分,满分为10分,可以看到我的代码本次评分为0分T_T。

既然知道了自 己的代码哪里不规范,就去针对性地改正吧,根据提示结果首先将函数参数赋值 = 两边的空格去掉,再将多余的空 行去掉,然后运行一下pylint再次进行检测,得到如下结果:

可以看到,刚才修改过的代码相关问题提示已经没有了,评分也从0分提高到了3.33分。但是仍然有很多问题,这里就要注意了,PEP8并不是要百分百遵守的,当遵循PEP 8规范会使代码可读性变差、会跟周围代码风格不一致的时候,还是要遵循自己的判断。

这种情况下,pylint也提供了一种操作,可以手动屏蔽某些问题提示,以刚才的代码为例,剩下的几个问题主要是因为使用了Tab键、变量命名不规范、缺少文档说明造成的,我们可以使用

pylint --disable=mixex-indentation,invalid-name,missing-docstring 模块名称 命令对相关规范进行屏蔽重新检 测,发现问题提示全部消除,评分也提升到了10分。

一段20行的代码就检测到如此之多的问题提示,虽然手动修改代码有助于对PEP 8规范的学习,但当项目文件比较 多、脚本代码很长的时候,实在是一个不小的工作量,因此就出现了能够自动优化代码风格的工具。

3

自动优化工具Black

在众多代码格式化工具中,Black算是比较新的一个,它最大的特点是可配置项比较少,个人认为这对于新手来说是件好事,因为我们不必过多考虑如何设置Black,让 Black 自己做决定就好。

1).安装与使用

与pylint类似,直接pip install black即可完成该模块的安装,不过black依赖于Python 3.6+,但它仍然可以格式化Python2的代码。

在使用方面black默认读取指定python文件并对其进行代码规范格式化,然后输出到原文件。

l = [1,
    2,
    3,
]

例如,我们将上面这段代码保存为test.py,然后在控制台执行 black test.py 指令,再次打开test.py,发现其中 的代码变成了这个样子:

l = [1, 2, 3]

当然,Black的封装程度再高也是有自定义配置项的,例如使用--version查看版本、使用--help查看帮助信息、使用--diff将修改信息输出到控制台而不更改原文件,下面我们还是结合一个实例来进行演示说明。

2).实例演示说明

这里我们仍然使用pylint部分的代码进行演示。通过上面的操作我们知道,对这段代码直接使用pylint进行测试会输出很多问题提示,并给出一个评分0。现在我们首先使用black对其进行格式化,得到以下代码:

# -*- coding:utf-8 -*-

import pandas as pd

data = []
char_replace_dict = {':':'\t', '(':'(', ')':')', ',':','}

with open('xmq_survey.txt', 'r', encoding = 'utf-8') as file:
 for line in file.readlines():
   for key, value in char_replace_dict.items():
     line = line.replace(key, value)#原来这个是深度引用
     #这条代码比自己写的简介的多,也更python
   data.append(line)

with open('survey.txt', 'w', encoding = 'utf-8') as file:
 for line in data:
   file.write(line)

raw_data = pd.read_table('survey.txt', delimiter = '\t', header = None) #查看read_table函数的用法
raw_data.columns = ['Name', 'Raw Info']
raw_data.count()
print('successful')

(代码左右滑动)

可能看起来修改前后的代码差异并不十分明显,实质上black已经对代码中参数赋值 = 两端的空格、注释的格式、 制表符等进行了替换和修改,我们使用pylint来进行验证,执行 pylint 模块名称 命令,得到如下结果:

可以看到,相对于最初的文件,评分从0分提高到7.3分,输出的问题提示少了很多,剩余的问题主要是缺少说明文档、变量命名不规范.black对于提高我们代码规范性价比也是非常高的。

如果不想black直接对原文件进行修改,而是想看看它对代码中的哪些地方进行了改动的话,可以使用--diff参数,执行black --diff 文件名称,black会将相关信息输出到控制台(下图,其中-表示源代码,+表示建议修改后的代码),而不会对原文件进行修改。

总之,black真的是一个非常好用的库,尤其对于新手来说,可以很方便地规范自己的代码风格。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • React Native开发必备的10个插件包

    Sublime Text 具有漂亮的用户界面和强大的功能,例如代码缩略图,多重选择,快捷命令等。Sublime Text 更妙的是它的可扩展性。所以,这里挑选了...

    xiangzhihong
  • 资源 | 像「花书」一样排版:Ian Goodfellow「亲授」的高级LaTex教程

    机器之心整理 作者: Ian Goodfellow 参与:邱陆陆 当地时间 3 月 1 号,深度学习知名同名教材《Deep Learning》的第一作者 Ian...

    机器之心
  • 能挣钱的,开源SpringBoot和Vue的企业级项目,代码很规范!

    SmartAdmin由河南·洛阳 1024创新实验室团队研发的一套互联网企业级的通用型中后台解决方案!

    Java团长
  • 能挣钱的,开源SpringBoot和Vue的企业级项目,代码很规范!

    SmartAdmin由河南·洛阳 1024创新实验室团队研发的一套互联网企业级的通用型中后台解决方案!

    JAVA葵花宝典
  • Web 开发人员的文档生成工具【推荐】

    工欲善其事必先利其器,在此给 Web 开发人员推荐几款优秀的开源文档生成工具,希望能对大家有所帮助。

    一墨编程学习
  • Java编程中,有哪些好的习惯从一开始就值得坚持?

    来源:zhihu.com/question/32255673/answer/532272606

    Java团长
  • 不得不推荐的开发利器

    子曰:“工欲善其事,必先利其器“,事先把工具准备好,可以起到事半功倍的效果,本篇将介绍开发过程中经常使用到的开发工具们。

    JavaQ
  • 谁是2020年最强Python库?年度Top10出炉,看你用过几个!

    2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库Top10。

    统计学家
  • Python编辑器--Ulipad

    windows下Python的IDE选择:http://blog.csdn.net/cserchen/article/details/7036435 本人结合使...

    深度学习思考者
  • Python的这几个技巧,简直屌爆了

    我已经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小技巧和知识,大多...

    测试小兵
  • 用了这 7 个 VS Code 插件,想写一辈子代码

    你知道将高级开发人员与普通开发人员区分的条件是什么吗?没错,是所使用的工具,俗话说,"工欲善其事必先利其器", 拥有正确的工作工具可以让开发人员的生活变得更加轻...

    Vam的金豆之路
  • 学习数据分析,有哪些好书值得读?都在这里了

    导读:这个年代里,“用数据说话”已经像是一种过气的口号。各行各业不同角色和身份的人们都已懂得“用数据说话”的重要性,甚至日常生活中也需要用数据看清事实,科学吃瓜...

    华章科技
  • 这 5 个能挣钱的 SpringBoot 项目,真TMD香!

    不得不佩服 Spring Boot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统,小伙伴们再也不用从头到尾撸一个...

    main方法
  • 技术宅如何约到抖音小姐姐?

    前几天,就有一位熟练Python的技术人,用Python编程了一个抖音小姐姐挖掘器,把抖音上翻漂亮小姐姐全都找了出来!

    养码场
  • 一文获取36个Python开源项目,平均Star 1667,精选自5000个项目

    近几年内,我们比较了近5000个开源 Python 项目,并从中挑选了36个最佳项目。

    CDA数据分析师
  • 告别单调工作系列——利用python再次拯救漂亮妹子

    记得帮妹子搞定自动提交表单之后的第三天,妹子端着奶茶乐呵呵的来找我,和我一番畅谈理想,又指点江山之后,终于切入了正题。

    Bug生活2048
  • 用了这 7 个 VS Code 插件,想写一辈子代码

    你知道将高级开发人员与普通开发人员区分的条件是什么吗?没错,是所使用的工具,俗话说,"工欲善其事必先利其器", 拥有正确的工作工具可以让开发人员的生活变得更加轻...

    秋风的笔记
  • 如何写出让同事膜拜的漂亮代码?

    “代码千万行,注释第一行;编程不规范,同事两行泪”;"道路千万条,安全第一条。代码不规范,亲人两行泪。"在技术圈广为盛传,可见代码不规范让程序员们是多么的头痛。...

    Java技术栈
  • 能挣钱的 SpringBoot 项目,真香!

    不得不佩服 Spring Boot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统,小伙伴们再也不用从头到尾撸一个项目了,简直...

    Leetcode名企之路

扫码关注云+社区

领取腾讯云代金券