pep 8 规范的一些记录

一、pep8起源

龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本。

二、官网链接

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

  中文翻译链接

  https://my.oschina.net/u/1433482/blog/464444

三、重要总结

  一致性问题:

    风格指南强调一致性。项目、模块或函数保持一致都很重要。

    当遵循指南降低代码一致性,可读性的时候就不必强行修改。

  代码布局:

    缩进四个空格代替tab

    行宽79个字符,文本长块72个字符

  字符编码总是用UTF-8

  导入模块:

    导入时单行导入,开头导入,

    顺序为标准库,本地库,第三方库,

    尽量使用绝对路径,不用通配符导入,

  空格:

    括号内没有空格,

    关键字参数和默认值参数的前后不要加空格

    逗号,分号,冒号前无空格

    运算符后有空格,

  不推荐复合语句,一句一行

  用英文写注释,及时更新注释,少用行内注释,文档字符串:为所有公共模块、函数、类和方法书写

  命名:    

    最重要的原则

    用户可见的API命名应遵循使用约定而不是实现。(不太明白)

    命名风格  

  • b(单个小写字母)

  • B(单个大写字母)

  • lowercase(小写串)

  • lower_case_with_underscores(带下划线的小写)

  • UPPERCASE(大写串)

  • UPPER_CASE_WITH_UNDERSCORES(带下划线的大写串)

  • CapitalizedWords(首字母大写的单词串或驼峰缩写)注意: 使用大写缩写时,缩写使用大写字母更好。故 HTTPServerError 比 HttpServerError 更好。

  • mixedCase(混合大小写,第一个单词是小写)

  • Capitalized_Words_With_Underscores(带下划线,首字母大写,丑陋)

首尾有下划线的情况:

  • _single_leading_underscore:(单前置下划线): 弱内部使用标志。 例如"from M import " 不会导入以下划线开头的对象。

  • single_trailing_underscore_(单后置下划线): 用于避免与 Python关键词的冲突。 例如:Tkinter.Toplevel(master, class_='ClassName')

  • __double_leading_underscore(双前置下划线): 当用于命名类属性,会触发名字重整。 (在类FooBar中,__boo变成 _FooBar__boo)。

  • __double_leading_and_trailing_underscore__(双前后下划线):用户名字空间的魔法对象或属性。例如:__init__ , __import__ or __file__,不要自己发明这样的名字。

命名约定规范

  • 避免采用的名字

决不要用字符'l'(小写字母el),'O'(大写字母oh),或 'I'(大写字母eye) 作为单个字符的变量名。一些字体中,这些字符不能与数字1和0区别。用'L' 代替'l'时。

  • 包和模块名

模块名要简短,全部用小写字母,可使用下划线以提高可读性。包名和模块名类似,但不推荐使用下划线。

模块名对应到文件名,有些文件系统不区分大小写且截短长名字,在 Unix上不是问题,但当把代码迁移到 Mac、Windows 或 DOS 上时,就可能是个问题。当然随着系统的演进,这个问题已经不是经常出现。

另外有些模块底层用C或C++ 书写,并有对应的高层Python模块,C/C++模块名有一个前置下划线 (如:_socket)。

  • 类名

遵循CapWord。

接口需要文档化并且可以调用时,可能使用函数的命名规则。

注意大部分内置的名字是单个单词(或两个),CapWord只适用于异常名称和内置的常量。

  • 异常名

如果确实是错误,需要在类名添加后缀 "Error"。

  • 全局变量名

变量尽量只用于模块内部,约定类似函数。

对设计为通过 "from M import " 来使用的模块,应采用 __all__ 机制来防止导入全局变量;或者为全局变量加一个前置下划线。

  • 函数名

函数名应该为小写,必要时可用下划线分隔单词以增加可读性。 mixedCase(混合大小写)仅被允许用于兼容性考虑(如: threading.py)。

  • 函数和方法的参数

实例方法第一个参数是 'self'。

类方法第一个参数是 'cls'。

如果函数的参数名与保留关键字冲突,通常在参数名后加一个下划线。

  • 方法名和实例变量

同函数命名规则。

非公开方法和实例变量增加一个前置下划线。

为避免与子类命名冲突,采用两个前置下划线来触发重整。类Foo属性名为__a, 不能以 Foo.__a访问。(执著的用户还是可以通过Foo._Foo__a。) 通常双前置下划线仅被用来避免与基类的属性发生命名冲突。

  • 常量

常量通常在模块级定义,由大写字母用下划线分隔组成。比如括MAX_OVERFLOW和TOTAL。

  • 继承设计

考虑类的方法和实例变量(统称为属性)是否公开。如果有疑问,选择不公开;把其改为公开比把公开属性改为非公开要容易。

公开属性可供所有人使用,并通常向后兼容。非公开属性不给第三方使用、可变甚至被移除。

这里不使用术语"private", Python中没有属性是真正私有的。

另一类属性是子类API(在其他语言中通常称为 "protected")。 一些类被设计为基类,可以扩展和修改。

谨记这些Python指南:

  1. 公开属性应该没有前导下划线。

  2. 如果公开属性名和保留关键字冲突,可以添加后置下划线

  3. 简单的公开数据属性,最好只公开属性名,没有复杂的访问/修改方法,python的Property提供了很好的封装方法。 d.如果不希望子类使用的属性,考虑用两个前置下划线(没有后置下划线)命名。

公共和内部接口

任何向后兼容的保证只适用于公共接口。

文档化的接口通常是公共的,除非明说明是临时的或为内部接口、其他所有接口默认是内部的。

为了更好地支持内省,模块要在__all__属性列出公共API。

内部接口要有前置下划线。

如果命名空间(包、模块或类)是内部的,里面的接口也是内部的。

导入名称应视为实现细节。其他模块不能间接访名字,除非在模块的API文档中明确记载,如os.path中或包的__init__暴露了子模块。

    

转载于:https://www.cnblogs.com/xinghuaikang/p/8486493.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中的类加多线程代码修炼之二

背景:在上一篇文章中 写到了我第一次使用C使用多个类多个线程进行编程,由于是第一接手“这么大一个工程”,所以还是要有个参照物的,由于我呢之前好几年一直在看的一个C代码工程就是ORB-SLAM了,这个工程使用C语言&#…

Primer c++ 第5版pdf

下载地址:网盘下载 内容简介 这本久负盛名的 C经典教程,时隔八年之久,终迎来史无前例的重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C 大师 Stanley B. Lippman 的丰富实践经验,C标准委员会原负责…

eclispe修改project Explorer字体大小

切换到Eclipse目录下: D:\JAVA\spring-tool-suite\sts-4.0.2.RELEASE\plugins\org.eclipse.ui.themes_1.2.200.v20180828-1350 找到下面的这个css文件 打开找到下面的位置在下面添加代码:CTabFolder Tree{font-size: 15px;} 复制代码重启Eclipse,就可以看到效果 修改前 修改后…

3-4 第三天 Generator生成器

Generator是ES6里面的新增规范,ES6其实就是ES2015。ES5、ES6、ES7这些术语大家上网一查就都明白了。JavaScript是一个范程,就是我们说的JS。ES就是ECMA Script,是JavaScript标准的书面说法。ES4、5、6、7其实是JS这门语言发展中的不同的版本。…

神奇的事情--长见识了

背景:我的这个工程里有多个命名空间,之所以是这样是因为,有一个跟踪算法他本身有几个namespace,然后我在他的基础上进行整合代码,将其作为一个功能接口,供其他函数调用,我在整合代码时,将我新加…

箭头函数的使用用法(一)

1 //箭头函数的一个好处是简化回调函数2 //箭头函数没有参数,就使用圆刮号代表参数部分;3 var f () >5;4 console.log(f());5 //两个参数的情况,代码块只有一条语句,可以省略{}6 var f (a,b)> console.log(ab);7 f(1,3);8…

LinkedList中查询(contains)和删除(remove)源码分析

一、contains源码分析 本文分析双向链表LinkedList的查询操作源码实现。jdk中源程序中,LinkedList的查询操作,通过contains(Object o)函数实现。具体见下面两部分程序:① public boolean contains(Object o) {return indexOf(o) ! -1; } ② p…

分块入门

我貌似和所有的数据结构都有些误会。。。。。。 在处理一些修改查询问题的时候,我们可以利用分治的思想,比如说把一个线性的数据不断分成一棵二叉树,也就是我们所说的线段树,这样我们就可以在logn的时限里做到修改和查询。同理我们…

开始使用gitlab

不得不说,我真不是一个合格的程序猿,工作马上两年了,github和gitlab用的一点也不熟练,每次兴致来了就搞几下,可是每次都浅尝辄止,不求甚解,时间一长,上一次练习的步骤就都记不起来了…

Spark 2.2.0 文档中文版 Collaborative Filtering 协同过滤 JAVA推荐系统

协同过滤常用于推荐系统,这项技术旨在填补 丢失的user-item关联矩阵 的条目,spark.ml目前支持基于模型的协同过滤(用一些丢失条目的潜在因素在描述用户和产品)。spark.ml使用ALS(交替最小二乘法)去学习这些…

淘宝top平台调用接口响应时间优化

我的专栏地址:我的segmentfault,欢迎浏览 一、背景 调用top接口的响应时间长(160ms左右),超时和连接异常频繁发生。导致消息组件消费工程的tps遇到瓶颈(单实例单消息队列250tps),只能通过增加实…

树上倍增一些理解和写法

树上倍增可以比较容易求得i节点的第k个父亲,我们定义一个二维数组fa[i][j]代表节点i的第2^j个父亲,关于有什么用我们等会再说,现在先学会怎么去求这个fa数组 我们可以通过从根节点开始一遍dfs求得所有fa数组,首先我们发现fa数组有…

图像去畸变和添加畸变

背景:最近的项目中用到的图像去畸变的知识,刚开始是直接调用opencv中提供的函数cv::initUndistortRectifyMap()和cv::remap()函数,实现图像的全局去畸变,但是由于图像的分辨率很高,再加上,实际过程中我们只…

win10上编译libharu库

背景: 最近的项目需要自动的生成pdf文件,我在网上查看相关的资料,发现目前比较流行的生成pdf文件的库有两个,一个是libpdf,另一个是libharu。libpdf个人使用时免费的但是商业使用就需要收费了,否则得到的p…

爬虫——正则表达式re模块

为什么要学习正则表达式 实际上爬虫一共就四个主要步骤: 明确目标:需清楚目标网站爬:将所有的目标网站的内容全部爬下来取:在爬下来的网站内容中去掉对我们没有用处的数据,只留取我们需要的数据处理数据:按…

深入Spring Boot:快速集成Dubbo + Hystrix

2019独角兽企业重金招聘Python工程师标准>>> 背景 Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包&#xff…

BZOJ2333 [SCOI2011]棘手的操作 【离线 + 线段树】

题目 有N个节点,标号从1到N,这N个节点一开始相互不连通。第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x v: 将第x个节点的权值增加v A2 x v: 将第x个节点所在的连通…

opencv图像仿射变换和普通旋转

背景:今天需要对程序生成的图像进行旋转90度和下采样操作,当然还有改变图像类型的操作,就是把原来.png的图像转换为.jpg的图像,主要是我目前使用libharu库,无法成功从本地加载png图像到pdf中去,不得不使用j…

讨厌麻烦的ora 01722无效数字

webservice开发过程中,数据库由原来的oracle改为现在的sql server。然后重新调试,结果报出ora 01722无效数字的错误。 由于连接oracle数据库的时候并没有问题,所以一开始我以为是数据库不同,导致部分数据类型差异,&…

CSS样式:覆盖规则

规则一&#xff1a;由于继承而发生样式冲突时&#xff0c;最近祖先获胜。 CSS的继承机制使得元素可以从包含它的祖先元素中继承样式&#xff0c;考虑下面这种情况: <html><head><title>rule 1</title><style>body {color:black;}p {color:blue;}…