作者 | Rocky0429

来源 | Python空间

本文为 AI科技大本营投稿文章(欢迎给我们投稿,投稿请联系微信1092722531)

写在之前

每个人都有自己的代码风格,随着写的行数增加,自己对于代码的审美也会变的不一样,这就像是一个逐渐蜕变的过程,每过一段时间回头再去看看自己之前写的代码就会生出一种「这么丑的玩意儿竟然是我写的」这种感慨。

之前不论是写 C 或者是 C++ 的时候,对于代码风格的好坏观感完全是凭着自己的主观意识,也没有什么官方标准说这样那样就是好看的。等学了 Python 以后,神奇的发现 Python 官方竟然给出了一种编码规范 PEP 8,当然这个只是个标准而已,并没有强制要求大家都要去遵守,但又好像大多数人都使用了 PEP 8 编码风格,使它已经成为了事实上的代码风格标准。

PEP 8 编码规范

Python 代码从第一眼看上去,给人的感觉就是简洁优美,可读性强,也就是我们日常所说的「高颜值」。一方面是因为 Python 自身的优秀设计,比如统一的锁进,没有多余的符号从而让代码变的更加简洁;另一方面就是因为它有着一套较为统一的编码风格,当然它本身只是编码风格方面的建议而不是强制,相应的在编写 Python 代码的编辑器自动提供 PFP 8 检查,当你编写的代码违反了 PEP 8 规范的时候,会给出警告信息和修正的建议。与此同时,还有专门的检查工具对 Python 的代码风格进行检查。

由上,还是建议在编写 Python 代码的时候都遵循 PEP 8 编码规范,毕竟你以后不可能是只一个人写代码,未来不论是在公司或者某些开源项目中,作为其中的一份子,肯定还是要在风格上向大众看齐的。

PEP 8 编码规范详细的给出了 Python 编码的指导,包括什么对齐啦,包的导入顺序啦,空格和注释啦还有命名习惯等方方面面,并且还有详细的事例。

下面我以「包」的导入为例,看一下 PEP 8 给出的具体编程指导。在 Python 中, import 应该一次只导入一个模块,不同的模块应该独立一行:

import pandas
import numpy

反面例子:

import pandas,numpy

如果想要从一个模块里面导入多个,也可以像下面这样:

from subprocess import Popen, PIPE

import 语句应该处于源码文件的顶部,位于模块注释和文档字符串之后,全局变量和常量之前。在导入不同的库的时候,应该按照以下的顺序分组,各个分组之间以空行分隔:

  • 导入标准库模块

  • 导入相关第三方库模块

  • 导入当前应用程序/库模块

具体事例如下所示:

import os
import time

import psutil

from test import u_test,my_test

Python 中还支持相对导入和绝对导入,在这里还是强推绝对导入。因为绝对导入的可读性更好一些,也不容易出错,即使出错了也会给出更加详细的错误信息。具体如下所示:

from sub_package import tools
from sub_package.tools  import msg

当然除了上述以外还有更多对于包的规范的描述,PEP 8 的编码风格指导比较长,并且写的非常详细,所以我就不在这一一介绍了,详细的可以参考 Python 官网上的资料。

pycodestyle 检查代码规范

我在上面说过 PEP 8 只是官方给出的 Python 编码规范,并没有强制要求大家都遵守,但是又由于大家都在用,所以它也就变成了事实上的 Python 代码风格标准,既然都是标准了,那么就应该有工具来检查这个标准,这样可以帮助 Python 小白规范自己的代码,也可以帮助大家在开源或者工作中形成统一的代码风格。

为了达成上述的目的,官方提供了同名的命令行工具来检查 Python 代码是否违反了 PEP 8 规范,并且对违反规范的地方给出了相应的提示信息。

pip install pep8

规范的名字是 PEP 8 ,这个检查代码风格的命令行工具叫 pep8,这个很容易引起大家的困惑,因此 Python 之父建议将 pep8 重新命名为 pycodestyle,下面我们来看一下 pycodestyle 的用法。

首先通过 pip 安装一下:

pip install pycodestyle

对一个或者多个文件运行 pycodestyle,打印检查报告:

通过 --show-source 显示不符合规范的源码,以便程序员进行修改,具体如下所示:

autopep8 格式化代码

autopep8 能够将 Python 代码自动格式化为 PEP 8 风格,它使用 pycodestyle 工具来决定代码中的哪部分需要被格式化,这能够修复大部分 pycodestyle 工具中报告的排版问题。autopep8 本身也是一个用 Python 写的工具,所以我们还是可以用 pip 直接安装:

pip install autopep8

它的使用方式也很简单,具体如下所示:

autopep8 --in-place test_search.py

上述代码如果不带 --in-place 的话,会将 autopep8 格式化以后的代码直接输出到控制台。我们可以用这种方式检查 autopep8 的修改,使用 --in-place 则会直接将结果保存到源文件中。在这我继续用上面的例子中用到的 py 文件,具体如下所示:

上面的例子中,autopep8 顺利的修复了所有的问题,但是如果你这个时候查看源文件的话,你会发现源文件的内容还是和原来一样,并没有被修改。这个时候我们就要用到 --in-place,加上这个选项将不会有任何输出, autopep8 会直接修改源文件。

autopep8 --in-place test_search.py

(*本文为转载文章,如需转载请联系邮箱 zhuanzai@geekpark.net)

推荐

推荐阅读

  • 年度重磅:《AI聚变:2018年优秀AI应用案例TOP 20》正式发布

  • 真的,Pornhub比今日头条或是Netflix更了解你爱看什么

  • 春运渡劫!会Python能帮我抢回家的火车票吗?

  • 无业务不技术:那些誓用区块链重塑的行业,发展怎么样了?

  • 突发!12306 脱库 410 万用户数据究竟从何泄漏?

  • 为什么 ofo 彻底凉了?

  • 下一次 IT 变革:边缘计算(Edge computing)

  • 老程序员肺腑忠告:千万别一辈子靠技术生存!

  • 微软彻底拥抱Python!

如何写出符合Python审美的代码风格?相关推荐

  1. 【转载】如何写出低碳环保的 Android 代码

    如何写出低碳环保的 Android 代码 随着环境问题越来越严重,人们越来越重视低碳环保的生活方式.作为码农的我们自然也应该为环保做出应有的贡献.那么什么是低碳环保,简而言之就是就是低能量.低消耗.低 ...

  2. 你应该知道的7个写出更好的 Java 代码的技巧

    来源:SpringForAll社区 查看这些技巧和窍门可以帮助你写出更好的 Java 代码. 是的,你可以按照以下7个技巧和窍门编写出简短.整洁的 Java 代码.他们中的一些可能会让你感到惊讶,但是 ...

  3. 如何写出三体的MATLAB程序-代码篇

    如何写出三体的MATLAB程序-代码篇 写在前面 在上文当中我们已经对三个物体之间的受力进行了分析,也说明了在时间 t t t下的加速度.速度和位移的计算方式. 本篇中将根据上一篇的公式来写出对应的代 ...

  4. 如何写出优雅的 Go 语言代码

    如何写出优雅的 Go 语言代码 查看全文 http://www.taodudu.cc/news/show-3196428.html 相关文章: 写日志的那些事儿 写有价值的单元测试 腾讯私有云MySQ ...

  5. Java Stream如何写出高雅又装*的代码

    Java Stream如何写出高雅又装*的代码 一. 冷静分析 二. 直接开装 2.1 初级炫 2.2 普通炫 2.3 高级炫 2.4 再炫一波 拿到当前key与对应的数量 2.5 Map Reduc ...

  6. matlab模拟三体运动_如何写出三体的MATLAB程序-代码篇

    如何写出三体的MATLAB程序-代码篇 写在前面 在上文当中我们已经对三个物体之间的受力进行了分析,也说明了在时间 下的加速度.速度和位移的计算方式. 本篇中将根据上一篇的公式来写出对应的代码,并且详 ...

  7. 写出漂亮 Python 代码的 20条准则

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | 架构头条 按照<代码整洁之道>的说法,"花在阅读和编码 ...

  8. 19 条法则,教你写出火爆 GitHub 的烂代码!

    古人云:好代码万里挑一,烂代码千篇一律. 作为一名开发者,除了我自己写的,别人的代码在我眼里大部分都是「烂代码」.但苦于资历尚欠,所以烂代码见得并不是很多,也没总结出来什么规律.但 GitHub 上的 ...

  9. 如何写出低碳环保的Android代码

    声明:本文CSDN作者原创投稿文章,未经许可禁止任何形式的转载.  作者:徐鸿福,多年后端及移动端开发经验,现任MaxLeap UX团队成员,主要从事于Android相关开发,目前对Kotlin和Ru ...

最新文章

  1. 如何用Service来启动背景音乐
  2. 服务器扫描出漏洞怎么才会被攻击_维护企业服务器安全,你需要做到这8点
  3. C语言实现通用链表初步(一)
  4. 绝对震撼 7款HTML5动画应用及源码
  5. [转] PHP之加解密: Mcrypt函数
  6. AndroidStudio配置gradle,让App自动签名
  7. 文华财经彩波均线主图指标公式(指标公式源码)破解加密
  8. Mac OSX终极瘦身
  9. 中文搜索引擎2010Q2市场份额
  10. 在线遥感影像与地图集数据下载搜集
  11. Android实现有声计算器代码,有声语音计算器效果与代码
  12. 3dmax基本物体放置操作1
  13. 记人生第一次工作面试 - 小米前端实习
  14. Win版4S降级工具odysseusOTA4教程百分之百成功
  15. 诚之和:抛售11亿美元股票,马斯克亲自砸盘特斯拉
  16. 我的面试经历--缘起
  17. lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
  18. 漫谈程序员系列:找工作的辟邪剑谱
  19. 图像识别(一)| 从像素说起
  20. 下列属于计算机网络主要性能指标的有( ),下列属于计算机网络性能指标的有A.速率B.带宽C.时延D.误码率...

热门文章

  1. 使用CSS 3创建不规则图形
  2. 弯曲评论上关于SOC的一段文章【整理】
  3. linux启动x不启动桌面,redhat开机不启动桌面登录程序
  4. PAT_B_1027 打印沙漏
  5. git 提交丢失Warning, you are leaving 2 commits behind,
  6. Io流的字节流与缓冲流
  7. 《音乐商店》第4集:自动生成StoreManager控制器
  8. Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)
  9. SQL GROUP BY 语句
  10. 团队分数分配方法——BY 李栋