0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python官方竟然给出了一种编码规范PEP 8

电子工程师 来源:lq 2019-01-02 10:24 次阅读

写在之前

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

之前不论是写 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 应该一次只导入一个模块,不同的模块应该独立一行:

importpandasimportnumpy

反面例子:

importpandas,numpy

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

fromsubprocessimportPopen,PIPE

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

导入标准库模块

导入相关第三方库模块

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

具体事例如下所示:

importosimporttimeimportpsutilfromtestimportu_test,my_test

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

fromsub_packageimporttoolsfromsub_package.toolsimportmsg

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

pycodestyle 检查代码规范

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

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

pipinstallpep8

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

首先通过 pip 安装一下:

pipinstallpycodestyle

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

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

autopep8 格式化代码

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

pipinstallautopep8

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

autopep8--in-placetest_search.py

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

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

autopep8--in-placetest_search.py

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68342
  • 编辑器
    +关注

    关注

    1

    文章

    800

    浏览量

    31113
  • python
    +关注

    关注

    56

    文章

    4781

    浏览量

    84448

原文标题:如何写出符合Python审美的代码风格?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python全套教程_Python从入门到精通day1_10-PEP8 编码规范

    python
    电子学习
    发布于 :2023年01月13日 15:55:11

    Python编码规范分享

    国际规范名:PEP 8变量名规范(标识符规范)字符串函数名小写, 多个单词用 _ 分隔开由字母数字或下划线组成,首字母不能为数字 2. 不能
    发表于 10-27 07:15

    介绍一种H.264编码中帧间模式选择的算法

    本文提出了一种H.264编码中帧间模式选择的算法,并针对该算法给出了4计算阈值的方法。
    发表于 06-04 07:17

    一种实用的混沌保密编码方法

    基于实用符号动力学的基础理论,提出了一种实用的混沌保密编码方法,该方法借助于单峰的logistic映射处于混沌吸引子状态时产生的符号序列作为密钥,对信源编码信号进行加密
    发表于 11-18 00:17 12次下载

    一种安全的纠错网络编码

    该文利用消息空间的所有子空间上的一种度量,给出了一种安全的纠错网络编码。首先,此度量下的最小距离译码法可以纠正定维数的错误。另外,在此
    发表于 11-09 13:32 19次下载

    一种实用的混沌保密编码方法

    一种实用的混沌保密编码方法 基于实用符号动力学的基础理论,提出了一种实用的混沌保密编码方法,该方法借助于单峰的logistic映射处于混沌
    发表于 11-18 10:55 10次下载

    一种数字调幅广播编码调制器技术

    本文通过对宽带数据链及其关键技术的研究,提出了一种基于 DSP 的数字调幅广播DRM(Digital Radio Mondiale)编码调制器的实现方案,给出了
    发表于 12-28 11:23 20次下载

    一种频率编码键盘的设计与实现

    基于频率编码的思想,设计了一种频率编码键盘,分析了电路的工作机理,并给出了有关的汇编程序,从而达到仅用条I/O 线识别多个按键的目的,简化
    发表于 06-23 16:49 0次下载
    <b class='flag-5'>一种</b>频率<b class='flag-5'>编码</b>键盘的设计与实现

    基于双向MIMO中继系统的一种编码策略

    为了克服已有的双向MIMO中继系统模型中预编码技术计算量大的缺点,提出了一种基于双向MIMO系统的三时段预编码策略,给出了该策略的模型和算法
    发表于 06-09 16:39 34次下载
    基于双向MIMO中继系统的<b class='flag-5'>一种</b>预<b class='flag-5'>编码</b>策略

    一种频率编码键盘的设计与实现

    基于频率编码的思想,设计了一种频率编码键盘,分析了电路的工作机理,并给出了有关的汇编程序,从而达到了仅用条I/O线识别多个按键的目的 ,简
    发表于 03-30 17:02 10次下载

    初入门Python的小白介绍PEP是什么?

    或许你是个初入门Python的小白,完全不知道PEP是什么。又或许你是个学会了Python的熟手,见过几个PEP,却不知道这玩意背后是什么
    发表于 11-20 14:38 2272次阅读
    初入门<b class='flag-5'>Python</b>的小白介绍<b class='flag-5'>PEP</b>是什么?

    Python一种什么语言,它可以用来做些什么

    智慧人生,首选Python Python一种什么语言? Python一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非
    发表于 04-12 10:56 1276次阅读

    处理器扩展包(PEP)和调试头规范

    处理器扩展包(PEP)和调试头规范免费下载。
    发表于 05-12 10:31 8次下载

    Python中的默认编码

    我们使用Pycharm来编写Python程序时会指定工程编码和文件编码为UTF-8,那么Python代码被保存到磁盘时就会被转换为UTF-
    的头像 发表于 07-05 16:11 1096次阅读
    <b class='flag-5'>Python</b>中的默认<b class='flag-5'>编码</b>

    Python字符编码转换

    UNICODE字符串可以与任意字符编码的字节进行相互转换,如图: 那么大家很容易想到个问题,就是不同的字符编码的字节可以通过Unicode相互转换吗?答案是肯定的。 Python2中
    的头像 发表于 07-05 16:25 1056次阅读
    <b class='flag-5'>Python</b>字符<b class='flag-5'>编码</b>转换