首页
学习
活动
专区
工具
TVP
发布

浅谈Python之PEP8编码风格

相信有不少同学都知道,当我们在使用IDE写一段程序的时候,如果我们的语法有错误,那么IDE就会相应的画出红线

(这里我们少了一个:)

那么是不是当我们的代码中没有红色的下划线,就代表没有任何错误呢?

emmm,其实在某种程度上可以这样说

当我们的代码没有红色下划线的时候,确实可以准确的运行起来

BUT

你觉得这样带着灰色下划线的代码好看吗?

最为一个强迫症患者,这根本不能忍啊!

这就是PyCharm中最著名的PEP8代码规范

下面我们就来看一下如何写出,不带下划线的优雅代码

缩进(indentation)

使用四个空格表示每个缩进级别。

规范操作:

# 使用开分隔符(opening delimiter)进行对齐

foo = long_func_name(var_one, var_two, var_three, var_four)

# 使用更多的缩进以和其他的代码单元区别开来# 如下例的,参数部分比函数体多四个缩进以和函数体进行区别def long_func_name( var_one, var_two, var_three, var_four) print(var_one)

# 悬挂缩进(hanging indents):增加一个缩进级别

foo = long_func_name( var_one, var_two, var_three, var_four)

# 或者:

foo = long_func_name( var_one, var_two, var_three, var_four)a = [1,2,3,4,5,6]a = [1,2,3,4,5,6]

不规范操作:

# 当不适用垂直对齐时,禁止在第一行使用参数# 换句话说,在垂直对齐时,才可在第一行使用参数foo = lone_func_name(var_one, var_two, var_three, var_four)

# 当缩进不足以区分代码结构时,增加一个缩进级别

deflong_func_name( var_one, var_two, var_three var_four):print(var_one)

最大行长度

所有行的最大长度均为79个字符。

withopen('')asfile_1, \

open('')asfile_2: file_2.write(file_1.read())

使用正确的换行位置。推荐的位置在二元操作符(binary operator,如下述代码中的、以及)之后,而不是在它们之前:

classRectangle(Shape):

def__init__(self,width,height,

color='black',emphasis=None,highlight=):

if(width ==andheight ==and

color =='red'andemphasis =='strong'or

height >100):

raiseValueError("sorry, you lose")

ifwidth ==andheight ==and(color =='red'oremphasisis None):

raiseValueError("I don't think so -- values are %s, %s"%

(width,height))

Shape.__init__(self,width,height,color,

emphasis,highlight)

空行

顶级函数(当前文件中的第一个函数)或者顶级类(当前文件的第一个类)之前要有两个空行

定义在类内部的函数(成员函数)之间要留有一个空行

可以使用额外的空行(但要注意节制)以区分不同的函数组,

在一堆只有一行的函数之间不要使用空行(比如一些函数的空实现)

在函数内部使用空行,来标识不同的逻辑单元

imports

在独立的行中导入不同的包

规范操作:

不规范操作:

import sys,os

但从一个包中添加不同的模块或者函数也是允许的:

fromsubprocessimportPopen, PIPE

import文件应当总是位于文件的首部,仅在模块备注和文档之后,在模块的全局变量和常量之前的位置

import文件的顺序:

1. 标准库(如sys、os)

2. 相关的第三方的库(如numpy、pandas、matplotlib)

3. 自定义的.py文件或者自定义的库

以组的形式标识上述三种import文件,也即是用一个空行隔开

推荐使用绝对路径包含,因为可读性更好,并且不易出错。

importmypkg.sibling

frommypkgimportsiblingfrommypkg.siblingimportexample

然而,外部的相对包含也是一种可接受的替换,尤其是处理复杂的包层次时,也即是绝对包含将造成不必要的繁琐。

from.importsibling

from.siblingimportexample# .表示当前路径

标准库不存在复杂的包层次关系,应当总是使用其绝对导入路径。

应当避免通配符导入文件

字符串

在python中,不对单引号和双引号作区分,PEP的代码规范也不对此有所推荐。任选其一,统一使用即可。然而,当一个字符串包含单引号或者双引号时,使用另外一种方式避免转义符()的使用,以提高可读性。

更多的规范可以查看PEP8的官方文档

https://www.python.org/dev/peps/pep-0008/#fn-hi

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180313G0RHSN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券