作者:  奔跑的鳄鱼
公众号:菜鸟学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 = {':':'  ', '(':'(', ')':')', ',':','}

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 = ' ', header = None) #查看read_table函数的用法raw_data.columns = ['Name', 'Raw Info']raw_data.count()print('successful')

(代码左右滑动)

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

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

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

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 = {':':' ', '(':'(', ')':')', ',':','}

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 = ' ', 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真的是一个非常好用的库,尤其对于新手来说,可以很方便地规范自己的代码风格。

Python的爱好者社区历史文章大合集

2018年Python爱好者社区历史文章合集(作者篇)

福利:文末扫码关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“ 课程 ”即可获取:

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python的入门免费视频课程

小编的Python的快速上手matplotlib可视化库!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告扩展制作免费学习视频。

玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。

python标准化输出到txt_3大利器推荐,帮你写出规范漂亮的python代码相关推荐

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

    作者 | 奔跑的鳄鱼 来源 | 菜鸟学Python Python学了好久,但是拿出来review的代码好像总是长的不够俊美,不够工整!因此标准化的代码规范就显得尤为重要.今天就来推荐3个利器,pyth ...

  2. 自动优化工具Black帮你写出规范漂亮的python代码

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

  3. 中软python编码规范考试试题_卓越分享 | 如何写出一手漂亮的Python代码?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学编程的小白同 ...

  4. 帮写python代码_10个工具,帮你写出更好的Python代码

    我每天都使用这些实用程序来使我的Python代码可显示. 它们是免费且易于使用的. 编写漂亮的Python比看起来难. 作为发布工作流程的一部分,我使用以下工具使代码可显示并消除可避免的错误. 1. ...

  5. 如何用 GitHub Actions 写出高质量的 Python代码?

    这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出的代码既优雅,又符合所有最佳实践,且已经过完备测试. 作者 | Wojciech Krzywiec 译者 ...

  6. python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...

    原标题:涨姿势!这些小技巧让小白也可以写出更优雅的Python代码! 一.前言 我前两天回答了两个Python相关的问题,收到了很多赞,从答案被收藏的情况来看,确实对不少人都很有帮助,所以我也很开心. ...

  7. 教你写出可读性高的Python代码

    如果有人问起 Python 程序员他们最喜欢 Python 哪一点,他们一定会提到 Python 的高可读性.确实,对于 Python 来说,其高可读性一直是这门语言设计的核心.一个不争的事实是,相对 ...

  8. python程序的书写特点_不一样的Python代码写法,让你写出一手漂亮的代码

    Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于刚开始学语言的小白同学来说,解决问题的思路有的时候会比较单一,其实 ...

  9. python什么字体好看_七个不一样的Python代码写法,让你写出一手漂亮的代码

    原标题:七个不一样的Python代码写法,让你写出一手漂亮的代码 Python语言这么火,有很多同学是从其他语言转行过来的(比如c++,java语言),多多少少写代码的时候也会受其他语言的影响!而对于 ...

  10. python优雅代码大全_10个Python技巧帮你写出更优雅的代码

    阅读本文需要 2 分钟,公众号 somenzz ,欢迎学习 Python 的朋友订阅. 现在写代码的门槛非常低了,少儿都开始编程了,但从代码的风格一眼看出编码水平.是的,写代码是容易的,写出易读的代码 ...

最新文章

  1. c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
  2. ZOJ1027 Travelling Fee(DP+SPFA)
  3. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1055:判断闰年
  4. 读《构建之法》第11,12章有感
  5. 22 款设计和可视化神经网络的工具
  6. Java @FunctionalInterface注解
  7. 计算机二级办公软件高级应用难不难,计算机二级office难吗 考试内容是什么
  8. Instance Object
  9. [hdu5247]rmq+预处理
  10. 记一次spring5源码完整编译过程
  11. 前端学习图谱与新奇趣玩之前端Q直播回顾
  12. 极光Im + layIm 实现后台聊天
  13. 狂神说Linux03:Vim使用及账号用户管理
  14. 关于“元宇宙”,讲点你能听懂的
  15. 车道线检测---色彩空间变换
  16. ios让您的today变得更加有节奏,新出品Today:日历、提醒、习惯养成、倒计时
  17. 心理学家:人生最可怕的不是失去爱,而是失去这种能力
  18. 周末两天入门 PCB 设计
  19. matlab正负序分离模块,一种自适应宽频带正负序分离方法与流程
  20. 计算机归零按键,上电复位和按键复位区别

热门文章

  1. day20T3改错记
  2. SignalR入门之Hub
  3. 2017.5.26暴力赛解题报告
  4. 天瑞地安科技集团:APP软件如何优化
  5. Linux知识(4)----文件系统结构
  6. Tests of the Equality of Two Means
  7. HTML5变化 (一)
  8. Python源码剖析笔记3-Python执行原理初探
  9. sklearn,SVM 和文本分类
  10. matlab中的显示精度