PEP 8 规范

PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫“Python 增强规范”。

缩进规范

PEP 8 规范告诉我们,请选择四个空格的缩进,不要使用 Tab,更不要 Tab 和空格混着用。 第二个要注意的是,每行最大长度请限制在 79 个字符。

空行规范

PEP 8 规定,全局的类和函数的上方需要空两个空行,而类的函数之间需要空一个空行。

空格规范

函数的参数列表中,调用函数的参数列表中会出现逗号,请注意逗号后要跟一个空格,这是英语的使用习惯,也能让每个参数独立阅读,更清晰。

  • 冒号后面也要跟一个空格。
  • 在#后、注释前加一个空格。
  • 操作符,例如+,-,*,/,&,|,=,==,!=,请在两边都保留空格。不过与此对应,括号内的两端并不需要空格。

换行规范

控制每行的最大长度不超过 79 个字符,但是有时候,函数调用逻辑过长而不得不超过这个数字时按以下规范:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def solve1(this_is_the_first_parameter, this_is_the_second_parameter, this_is_the_third_parameter,this_is_the_forth_parameter, this_is_the_fifth_parameter, this_is_the_sixth_parameter):return (this_is_the_first_parameter + this_is_the_second_parameter + this_is_the_third_parameter +this_is_the_forth_parameter + this_is_the_fifth_parameter + this_is_the_sixth_parameter)def solve2(this_is_the_first_parameter, this_is_the_second_parameter, this_is_the_third_parameter,this_is_the_forth_parameter, this_is_the_fifth_parameter, this_is_the_sixth_parameter):return this_is_the_first_parameter + this_is_the_second_parameter + this_is_the_third_parameter + \this_is_the_forth_parameter + this_is_the_fifth_parameter + this_is_the_sixth_parameter(top_secret_func(param1=12345678, param2=12345678, param3=12345678, param4=12345678, param5=12345678).check().launch_nuclear_missile().wait())top_secret_func(param1=12345678, param2=12345678, param3=12345678, param4=12345678, param5=12345678).check() \.launch_nuclear_missile().wait()

1.通过括号来将过长的运算进行封装.

2.通过换行符来实现.

文档规范

  • import 尽量放在开头.
  • 不要使用 import 一次导入多个模块.
  • from module import func 这样的语句,请确保 func 在本文件中不会出现命名冲突。或者通过 from module import func as new_func 来进行重命名,从而避免冲突。

注释规范

行注释并不是很推荐的方式。

文档描述

docstring 的写法,它是用三个双引号开始、三个双引号结尾。我们首先用一句话简单说明这个函数做什么,然后跟一段话来详细解释;再往后是参数列表、参数格式、返回值格式。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
class SpatialDropout2D(Dropout):"""Spatial 2D version of Dropout.This version performs the same function as Dropout, however it dropsentire 2D feature maps instead of individual elements. If adjacent pixelswithin feature maps are strongly correlated (as is normally the case inearly convolution layers) then regular dropout will not regularize theactivations and will otherwise just result in an effective learning ratedecrease. In this case, SpatialDropout2D will help promote independencebetween feature maps and should be used instead.Arguments:rate: float between 0 and 1. Fraction of the input units to drop.data_format: 'channels_first' or 'channels_last'.In 'channels_first' mode, the channels dimension(the depth) is at index 1,in 'channels_last' mode is it at index 3.It defaults to the `image_data_format` value found in yourKeras config file at `~/.keras/keras.json`.If you never set it, then it will be "channels_last".Input shape:4D tensor with shape:`(samples, channels, rows, cols)` if data_format='channels_first'or 4D tensor with shape:`(samples, rows, cols, channels)` if data_format='channels_last'.Output shape:Same as inputReferences:- [Efficient Object Localization Using ConvolutionalNetworks](https://arxiv.org/abs/1411.4280)"""def __init__(self, rate, data_format=None, **kwargs):super(SpatialDropout2D, self).__init__(rate, **kwargs)if data_format is None:data_format = K.image_data_format()if data_format not in {'channels_last', 'channels_first'}:raise ValueError('data_format must be in ''{"channels_last", "channels_first"}')self.data_format = data_formatself.input_spec = InputSpec(ndim=4)

命名规范

变量使用小写,通过下划线串联起来,例如:data_format、input_spec、image_data_set。唯一可以使用单字符的地方是迭代,比如 for i in range(n) 这种,为了精简可以使用。如果是类的私有变量,请记得前面增加两个下划线。

  • 常量,最好的做法是全部大写,并通过下划线连接,例如:WAIT_TIME、SERVER_ADDRESS、PORT_NUMBER。
  • 函数名,同样也请使用小写的方式,通过下划线连接起来,例如:launch_nuclear_missile()、check_input_validation()。
  • 类名,则应该首字母大写,然后合并起来,例如:class SpatialDropout2D()、class FeatureSet()。

代码分解技巧

不写重复代码。

如:

if i_am_rich:money = 100send(money)
else:money = 10send(money)

都有send函数,可改为:

if i_am_rich:money = 100
else:money = 10
send(money)

代码嵌套过深:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def send(money):if is_server_dead:LOG('server dead')returnelse:if is_server_timed_out:LOG('server timed out')returnelse:result = get_result_from_server()if result == MONEY_IS_NOT_ENOUGH:LOG('you do not have enough money')returnelse:if result == TRANSACTION_SUCCEED:LOG('OK')returnelse:LOG('something wrong')return

可改为:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def send(money):if is_server_dead:LOG('server dead')returnif is_server_timed_out:LOG('server timed out')returnresult = get_result_from_server()if result == MONET_IS_NOT_ENOUGH:LOG('you do not have enough money')returnif result == TRANSACTION_SUCCEED:LOG('OK')returnLOG('something wrong')

以一个简单的二分搜索来举例说明。给定一个非递减整数数组,和一个 target,要求找到数组中最小的一个数 x,可以满足 x*x > target。一旦不存在,则返回 -1。

代码实现如果如下所示,那么可以再以一个函数只干一件事情的原则再优化下。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def solve(arr, target):l, r = 0, len(arr) - 1ret = -1while l <= r:m = (l + r) // 2if arr[m] * arr[m] > target:ret = mr = m - 1else:l = m + 1if ret == -1:return -1else:return arr[ret]print(solve([1, 2, 3, 4, 5, 6], 8))
print(solve([1, 2, 3, 4, 5, 6], 9))
print(solve([1, 2, 3, 4, 5, 6], 0))
print(solve([1, 2, 3, 4, 5, 6], 40))

优化如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def comp(x, target):return x * x > targetdef binary_search(arr, target):l, r = 0, len(arr) - 1ret = -1while l <= r:m = (l + r) // 2if comp(arr[m], target):ret = mr = m - 1else:l = m + 1return retdef solve(arr, target):id = binary_search(arr, target)if id != -1:return arr[id]return -1print(solve([1, 2, 3, 4, 5, 6], 8))
print(solve([1, 2, 3, 4, 5, 6], 9))
print(solve([1, 2, 3, 4, 5, 6], 0))
print(solve([1, 2, 3, 4, 5, 6], 40))

类中属性很多时可以抽出相同特性的单独作为类,如:

class Person:def __init__(self, name, sex, age, job_title, job_description, company_name):self.name = nameself.sex = sexself.age = ageself.job_title = job_titleself.job_description = descriptionself.company_name = company_name

job_title , job_description , company_name 都与工作有关,表达是同一个意义实体,就可以抽出单独作为类:

class Person:def __init__(self, name, sex, age, job_title, job_description, company_name):self.name = nameself.sex = sexself.age = ageself.job = Job(job_title, job_description, company_name)class Job:def __init__(self, job_title, job_description, company_name):self.job_title = job_titleself.job_description = descriptionself.company_name = company_name

Python规范:提高可读性相关推荐

  1. python如何提高程序可读性_Python规范:提高可读性

    PEP 8 规范 PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫"Python 增强规范". 缩进规范 PEP 8 规范告诉我们,请选择四个 ...

  2. 如何提高Python代码的可读性?

    程序的编码风格,指的是一个人在编写程序时表现出来的特点.习惯逻辑思路等. 对于程序员来说,在开发时要重视其编写规范,程序不仅应该能够在机器上正确执行,还应便于调试.维护及阅读. 下面,播妞举例说明一些 ...

  3. python之代码可读性浅谈

    python基础回顾--代码可读性解析篇 前言 在学习了一门编程语言之后,往往大部分人会急于使用代码实现自己的一些功能进行测试自己的学习情况,这是好的,但是在实际使用中代码却往往不是只给自己看的,或者 ...

  4. python 代码换行_你一定不知道的Python小技巧,提升你Python代码的可读性

    Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容: PEP 8是什么以及它存在的原因 为什么你应该编写符合PEP 8标准的代码 如何编写符合PEP 8的代码 为什么我 ...

  5. 趣学python3(2)-添加以数字文字形式使用下划线的功能,以提高可读性

    添加以数字文字形式使用下划线的功能,以提高可读性 x=2_111_222 y=0x_fff_6da print(x) print(y) 2111222 16774874

  6. PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门

    PEP8 python规范神器和jupyter notebook主题更改--Jupyter Notebook 快速入门 原文: https://www.cnblogs.com/xxtalhr/p/10 ...

  7. 蓝桥杯python算法提高真题——幸运顾客

    蓝桥杯python算法提高真题--幸运顾客 资源限制 时间限制:2.0s 内存限制:256.0MB 为了吸引更多的顾客,某商场决定推行有奖抽彩活动."本商场每日将产生一名幸运顾客,凡购买30 ...

  8. Python 会提高程序员的审美标准。

    Python 会提高程序员的审美标准. Python 会提高程序员的审美标准. http://www.zhihu.com/question/19900260 posted on 2012-08-21 ...

  9. python提升运行速度-一行代码让你的python运行速度提高100倍!Python真强!

    原标题:一行代码让你的python运行速度提高100倍!Python真强! Python用的好,猪也能飞起来. 今天,带大家学习如何让Python飞起来的方法,干货满满哦! python一直被病垢运行 ...

最新文章

  1. keepalived+LVS的实现
  2. K-means算法Java实现
  3. python网课什么平台好-python网课什么平台好
  4. 分组,命名分组,url的命名和反向解析
  5. renderTo:Ext.getBody()的意思
  6. LeetCode-424:替换后的最长重复字符
  7. 苹果怎么给软件加密码_用了2年苹果手机,才知道有这几个功能,钱没花冤枉,好用!!...
  8. 机器学习-吴恩达-笔记-11-异常检测
  9. Python包管理器-pip
  10. 【刷题】BZOJ 1003 [ZJOI2006]物流运输
  11. MATLAB学习笔记 imagesc函数使用
  12. windows硬盘读写速度测试
  13. 如何用决策树模型做数据分析?
  14. 钟道隆逆向英语学习法—学习SpeciaI English的三个阶段
  15. Ubuntu上搭建Hadoop环境(单机模式+伪分布模式) - 狂奔的蜗牛 - 博客频道 - CSDN.NET http://blog.csdn.net/hitwengqi/article/detai
  16. 【正交调制的通信的工程实现!!!】--比通原书讲得好多了,书上大都泛泛而谈!受益匪浅
  17. 【洛谷 1293】班级聚会
  18. 2022开源社区app源码多端圈子社区论坛系统
  19. M580PLC以太网读通讯和写通讯
  20. Py西游攻关之mysqlsqlalchemy

热门文章

  1. Java虚拟机1:什么是Java
  2. 浏览器窗口的高度和宽度
  3. 【计算几何】多边形点集排序
  4. STP生成树连载:制服网络广播风暴(1)
  5. 下面有关java类加载器牛客网_下面有关java classloader说法错误的是?
  6. 【PP模块】报废(损耗)类别简介(Scrap Categories and Their Effects)
  7. 【ABAP】BASE64加密及解密
  8. ME2N标准报表中加EKKO/EKPO中没显示的字段
  9. SAP HR模块复制PA30的人员
  10. ABAP日期操作函数