当前位置: 首页 > 编程日记 > 正文

如何写出符合Python审美的代码风格?

640?wx_fmt=jpeg


作者 | 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,打印检查报告:

640?

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

640?


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 文件,具体如下所示:

640?

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

autopep8 --in-place test_search.py


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



推荐


640?wx_fmt=jpeg


推荐阅读

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

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

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

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

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

  • 为什么 ofo 彻底凉了?

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

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

  • 微软彻底拥抱Python!

640?wx_fmt=png

相关文章:

程序员都该懂点 HTTP

作者:developerHaozGithub 地址:developerHaoz说明:本文主要是对 HTTP 基础知识进行总结和归纳,毕竟做 IT 的,网络这一块还是很重要的 本文的主要内容HTTP 是什么URL 详解HTTP 之请求篇HTTP 之响应篇一、HTTP是什么1、…

谁的青春不迷茫,其实我们都一样

如果你为人生画一条浅浅吃苦底线,就别妄想跨越深邃的幸福极限。在熠熠生辉前,总要捱过一段孤独不安的日子。唯有担得起厚重的经历,才能禁得起岁月推敲。记住:一定要努力,但别着急。加油! 很庆幸你能以这样好…

关于Iframe在IE6下不显示的bug

IE都出到IE8了,用IE6的人渐渐少了..但还是存在的.例如QAMM们在用. 所以,IE6下存在的问题也必须解决.这两天,我就遇到一个了: html<table> <tr> <td id"tdTest" runat"server"> <iframe id"ifrTest" h…

腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验

整理 | 琥珀出品 | AI 科技大本营对腾讯优图的发展历程&#xff0c;吴永坚表示&#xff0c;优图是非常幸运的&#xff0c;幸运的同时也知道优图选对了方向&#xff0c;只要坚持&#xff0c;还是会有收获的。12 月 15 日&#xff0c;以"新趋势、新技术、新应用"为主题…

JS子窗口调用父窗口中的函数

很简单只需要一句话就可以了&#xff1a; window.opener.changeColor(); 这里的changeColor()就是父窗口中JS的一个函数 本文转自sucre03 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/sucre/377011&#xff0c;如需转载请自行联系原作者

父亲节遇上端午节,你难道不回家吗?

创业者是孤独的 他们选择了更加艰险的人生。 同时&#xff0c;他们又是幸运的 因为他们背后有一位伟大的父亲。 决定创业时 他说&#xff1a;“大胆去闯吧&#xff0c;有爸爸在” 创业失败时 他说&#xff1a;“累了就回家&#xff0c;有爸爸在” 简单朴实的话语包含的是无私广…

蜘蛛爬虫网络高像素图片抓取工具[搜索引擎]

ZSpider—— 是一款Photo crawler工具。主要功能&#xff1a;免费抓取网络高像素图片&#xff0c;并下载到本地。使用说明&#xff1a;1. 软件环境&#xff1a;Windows XP, 20003, Vista, 2008, Windows 7.NET Framework 3.52. 双击Spider.exe&#xff0c;选择菜单&#xff0c;…

技术流 | 手把手教你用Python设计一个命令行界面

作者 | Yannick Wolff 译者 | 刘旭坤 整理 | Jane出品 | Python大本营对 Python 程序来说&#xff0c;完备的命令行界面可以提升团队的工作效率&#xff0c;减少调用时可能碰到的困扰。今天&#xff0c;我们就来教大家如何设计功能完整的 Python 命令行界面。对 …

送给那些还在迷茫的人

在现在这个高节奏的高效率的时代&#xff0c;两级分化特别厉害。有钱的会越来越有钱&#xff0c;没钱的要么安于现状&#xff0c;要么就越来越穷。  这种思维的产生根源就是不懂得把握机会&#xff0c;其实机会这个东西很奇妙&#xff0c;有时候我们自己也能发现有个机会就摆…

cisco路由器与QOS技术

1 前言随着因特网的普及&#xff0c;网络和人们生活的关系愈加密切&#xff0c;多样化的业务&#xff08;数据、语音、视频等&#xff09;应运而生。通常&#xff0c;这些业务对于通信条件的要求各不相同&#xff1a;数据业务对传递的可靠性要求非常高&#xff0c;误码率是最重…

shell介绍,命令历史,命令补全和别名 ,通配符, 输入输出重定向

2019独角兽企业重金招聘Python工程师标准>>> shell介绍 shell是一个命令解释器&#xff0c;提供用户和机器之间的交互&#xff1b; 支持特定语法&#xff0c;比如逻辑判断、循环&#xff1b; 每个用户都可以有自己特定的shell&#xff1b; CentOS7默认shell为bash (…

2018年Python开源项目Top100!只在这里!

整理 | Jane出品 | Python大本营2018 年的最后一天&#xff0c;营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单&#xff01;这些项目都是营长每月通过收集 Mybridge 的数据整理而来的&#xff0c;是不是很棒&#xff01;&#xff08;我要在留言区看到你们夸我~…

亲君圆梦,创业一起来

你想像中的创业&#xff0c;是不是办公地点找好了吗&#xff1f;需要注册公司一步一步来呢做哪个行业好呢有没有什么赚钱的项目呢没有你想的那么困难只需要一部手机发个链接点一下 玩一年 创业不花一分钱 校园创业 只需动动手指想要带你一起赚钱一起飞吗&#xff1f;我在厦门亲…

半途而废的香山之旅

今天终于下定决心去香山了&#xff01;大清早&#xff0c;就和同学小燕两个人买好了路上吃的东西。顶着北京早晨凉爽但有点阻的风骑车自行车向香山的方向进发了!这是我第一次去香山&#xff0c;路线也只能是摸索了&#xff01;我本来是准备从北四环西路一直往西骑&#xff0c;然…

POwershell 更改文件权限

今天需要给某个网络共享的大文件重新配置一个权限。这个文件夹下面有很多乱七八糟的小文件&#xff0c;很多创建人甚至已经离开公司了。如果一个个地目录手动修改所有者权限&#xff0c;再打开继承关系&#xff0c;这样比较麻烦&#xff0c;这个时候自然是用脚本比较方便了。 1…

“清华帮”AI造富

作者 | 马程&#xff1b;编辑 | 罗丽娟来源 | 全天候科技【导语】如今的AI创业者中&#xff0c;有一大批人出自精英汇聚的 “姚班”和清华的各个院系。他们们凭借技术傍身迅速打造出一批AI独角兽&#xff0c;但在发展过程中&#xff0c;他们又不得不面对资本的压力&#xff0c;…

什么时候是创业最佳时机?7个最佳的励志创业时机GET了吗

1、年轻时人们常说“出名要趁早”&#xff0c;创业也是同样的道理&#xff0c;创业越早&#xff0c;成功的几率就越大。年轻是一种巨大的财富&#xff0c;是无知和天真的完美结合&#xff0c;吸取经验可以作为愚蠢决定的借口。有人说&#xff0c;和职业篮球运动员一样&#xff…

连接ORACLE实例

public class OracleConn {public static Connection getConn() {Connection conn null;try {Class.forName("oracle:jdbc.driver.OracleDriver");String url "jdbc:oracle:thin:localhost:1521:数据库SID";String user "数据库用户名";String…

用Inno Setup来解决.NetFramework安装问题

前段时间朋友接了一个项目&#xff0c;具体是开发一个安装在局域网内的软件&#xff0c;这个软件会定时连接局域网内的服务器来更新本地客户端的一些信息&#xff0c;因为在局域网内存在着多种不同的Windows版本&#xff0c;从WindowsXP、Windows2003及Windows2008到Windows7等…

我想,有间花房

你带我走进你的花房&#xff0c;我无法逃脱花的清香&#xff0c;我不知不觉忘记了方向&#xff0c;你说我世上最坚强&#xff0c;我说你世上最善良&#xff0c;你不知不觉和花儿一样也许每一位 爱花的姑娘&#xff0c;都想有一间属于自己 的花 房 &#xff0c;在悠闲的午后&…

JS重写提示框(confirm)

<script language"javascript"> /** * 功能&#xff1a;显示提示窗口 * 作者&#xff1a;申楠 qq&#xff1a;38371354 email&#xff1a;amushen1yahoo.com.cn http;//amushen.cnblogs.com * 日期&#xff1a;2005-10-26 * 版本&#xff1a;1.1 * 备注&#…

实现通用人工智能还要多久?Hinton与AlphaGo之父这样回答

作者 | Klye Wiggers 译者 | 刘旭坤 责编 | 琥珀 出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09; 人工智能&#xff08;AI&#xff09;在即将过去的 2018 年进展神速&#xff0c;取得了很多令人瞩目的成就&#xff0c;比如预测用户感兴趣的音乐…

SQL Server 2008备份大全实战(七)

这一篇博文探讨下SQL Server 2008 备份的实际操作&#xff0c;事实上SQL Server 2008并不关心数据是备份到物理磁盘上还是磁带上&#xff0c;在SQL Server 2008数据库备份中&#xff0c;预定义的目标位置叫做设备。这里设备是对硬盘&#xff0c;磁带机等备份存储的通称。通俗些…

一个中心、三大原则,阿里这样做智能对话开发平台

作者 | 阿里巴巴高级算法专家 李永彬&#xff08;水德&#xff09;整理 | 一一出品 | AI科技大本营在阿里巴巴的X峰会上&#xff0c;阿里巴巴-智能服务事业部高级算法专家李永彬&#xff08;水德&#xff09;分享了小蜜智能开发平台的构建&#xff0c;他围绕平台来源、设计理念…

大学生目前普遍存在的问题,看你中招了没?

大学几多歌 上课时清醒没有发呆的多&#xff0c;发呆没有睡觉的多&#xff0c;睡觉没有玩手机的多。下课时自习没有吃零食多&#xff0c;吃零食没有看连续剧多&#xff0c;看连续剧没有游戏多。吃饭时吃早餐的没有吃午餐/晚餐的多&#xff0c;吃午餐/晚餐的没有点外卖的多。听讲…

javascript用感

最近两天一直与javascript打交道&#xff0c;现在想总结下所有值处 以下类型都是自己概括别名 1.创建型 例子: var objdocument.createElement("div");//例如创建个DIV var div1document.createElement("div"); div1.id"ddv"; div1.style.w…

Vulkan Tutorial 12 Fixed functions

Vertex input VkPipelineVertexInputStateCreateInfo结构体描述了顶点数据的格式&#xff0c;该结构体数据传递到vertex shader中。它以两种方式进行描述: Bindings:根据数据的间隙&#xff0c;确定数据是每个顶点或者是每个instance(instancing) Attribute 描述:描述将要进行…

年后跳槽BAT必看:10种数据结构、算法和编程课助你面试通关

作者 | javinpaul译者 | 大鱼编辑 | 一一出品 | AI 科技大本营进入 BAT 这样的巨头企业工作&#xff0c;无疑是很多程序员的梦想。但事实上&#xff0c;能通过这些公司高难度编程面试的只是一小撮人&#xff0c;大多数人因为理论知识和项目实践的匮乏导致在面试后很快被淘汰&am…

戚薇在冰箱放香水,是贫穷限制了想象力!

前有李诞冰箱里放面膜&#xff0c;今有戚薇冰箱里放香水&#xff0c;《拜托了冰箱》真是为观众们打开了新世界的大门。在昨晚播出的节目中&#xff0c;戚薇充分展现了她作为“美妆博主”的实力&#xff0c;冰箱里摆满的香水不仅让冰箱家族看得目瞪口呆&#xff0c;网友们也是激…

使用apache的activemq集合JMS处理异步消息

为什么80%的码农都做不了架构师&#xff1f;>>> 1&#xff1a;先去apache下载 http://activemq.apache.org/ &#xff0c;大约有25M&#xff0c;要有点耐心 直接打开就可以使用&#xff1b;当然它也提供了安装为windows service的方法 2&#xff1a;配置activemq 在…