前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >优雅的代码--PEP8规范

优雅的代码--PEP8规范

作者头像
小闫同学啊
发布2019-07-18 15:39:08
7520
发布2019-07-18 15:39:08
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共:2715 字 5 图 预计阅读时间:7 分钟

每日分享

Progress is impossible without change, and those who cannot change their minds cannot change anything.

没有改变就不可能取得进步,那些不愿改变想法的人无法改变任何事。

小闫语录

想要改变,首先是改变想法,否则只能重蹈覆辙。

PEP8规范

当入职一家公司,看到了一份乱糟糟的源码,你是不是心里奔腾着无数的草泥马?当你离职,留给后人的代码又如何呢?与人方便与己方便,规范代码,从我做起。为了让我们的代码提高可读性,便于后期维护,官方提供了一种规范,这就是PEP8。那么具体的内容是什么呢?下面一起来看看吧。

1.缩进

1.对于每一级缩进,采用四个空格(有的公司使用3个空格,视情况而定,但是官方推荐为4个)。如下:

代码语言:javascript
复制
def func():
    print("I'm EthanYan")

print前面有4个空格。

也许你因为使用一些工具,习惯了Tab键。但是有一点你要明白,有些地方tab键不是4个空格,而且python3中不允许混合使用空格和Tab键缩进。

2.括号里面包裹的参数过多时,可以通过换行缩进来表示,如下:

代码语言:javascript
复制
demo = func_name(var_one,
                 var_two,
                 var_three)

当然,下面的示例也是符合规范的:

代码语言:javascript
复制
my_list = [
    1,2,3,
    4,5,6
]

2.行最大长度

为了查看代码时,不需要来回的拉取滚动条,影响体验,所有行限制的最大字符数为79。对于文档字符串或者注释则应控制在72个字符内。

对于较长的代码优先使用的续行方式并不是通过反斜杠,而是通过小括号,中括号以及大括号中的隐式续行方式实现。

3.二元运算符

在使用一些二元运算符时,如果变量名超长,需要换行,怎么办?答案是在运算符之前换行。

代码语言:javascript
复制
# 推荐:运算符和操作数很容易进行匹配
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

但是为了便于查看,尽量写在一行。

4.空行

1.顶层函数和类定义时,前后用两个空行隔开。

2.类里面的方法定义用一个空行隔开。

3.对于函数中不同的逻辑块可以用空行隔开。

5.源代码

1.Python核心发布版本中的代码总是以UTF-8格式编码(或者在Python2中用ASCII编码)。

2.使用ASCII(在Python2中)或UTF-8(在Python3中)编码的文件不应具有编码声明。

3.在标准库中,如果需要使用非默认的编码,应该将他们放在注释或者文档字符串中。比如作者的姓名。

6.导入

1.我们在导入模块的时候,最好是放在顶部,而且还应该遵循一定的规律:先导入标准库,再导入相关第三方库,最后导入本地模块应用之类的。每一组导入之间,加上空行就最好不过了。

2.当然有时为了避免出现循环导入的问题,我们需要在特殊的地方导入,这也无可厚非。

3.导包的时候还要注意使用绝对路径导入,增加可读性,提高代码性能。但是凡事有例外,比如你的绝对路径那么长,好吧,我比划了一下,你没有看见,不怪我。这时你可以采用相对路径:

代码语言:javascript
复制
from . import ethanyan

4.避免使用通配符的导入,这样会增加命名空间中名字的重复率。如下的方式,不推荐使用:

代码语言:javascript
复制
from ethanyan import *

7.引号

单引号和双引号是相同的,根据你自己的喜好使用。但是为了避免出错,尽量使用单双引号包裹的形式;而不是单引号里面继续使用单引号,再用反斜杠进行转义。

8.表达式中的空格问题

1.对于小括号、中括号和大括号的使用,表达式紧跟括号,不要添加空格。

代码语言:javascript
复制
yes: func(1, 2)
no : func( 1, 2)

2.逗号、封号、冒号等紧跟前面字符:

代码语言:javascript
复制
yes: x, y, z
no : x , y , z

3.冒号再切片中,就像二元运算符一样,两边应该用相同数量的空格:

代码语言:javascript
复制
example[1 : 9]

9.注释

有一句话是这样说的:与代码相矛盾的注释比没有注释还糟糕。所以请不要乱添加注释,而且在修改完代码之后,请更新你的注释,不要给后人留下一个烂摊子。

紧跟代码的注释,应有至少两个空格的分割,如下:

代码语言:javascript
复制
x = x + 1   # 这是测试数据

10.命名规范

1.命名与python中标识符的命名规则一样,由字母数字下划线组成,且数字不能开头。

2.当然还有一些特殊的规则,比如大驼峰和小驼峰命名形式。

3.如果以单下划线开头命名,那么在 frommimport*的时候是不会导入的。

4.有时候你会看到一些以单下划线结尾的名字,不要奇怪。这是为了和python内部关键词不冲突的一种约定。

5.命名的时候不要使用魔方方法的形式如 __ni__

6.避免混淆,不要使用有歧义的字符。如 l(小写的L)和 1多像,还有 O(英文字母)和 0(数字)多像,对吧?你也不想认错。

7.类名首字母请大写。

8.异常命名的时候最后以 Error结尾,让人一下子辨别出来。

9.命名要做到见名知义。

10.函数名要小写。

11.一些常量名要全部使用大写。比如在项目中的一些常量放在一个单独的文件中,他们的名字应该如下:MAX_OVERFLOW

11.其他的建议

1.避免在尾部添加空格。因为尾部的空格通常都看不见,会产生混乱。比如,一个反斜杠后面跟一个空格的换行符,不算续行标记。有些编辑器不会保留尾空格,并且很多项目(像 CPython)在pre-commit钩子调用中会过滤掉尾空格。

2.前面也有所提到,就是在二元运算符两边都加一个空格。那么有哪些符号呢?

代码语言:javascript
复制
赋值:= 、+= 、-=
比较:== 、< 、> 、!= 、<> 、<= 、>= 、in 、not in 、is 、is not
布尔:and 、or 、not

3.在使用运算符的时候,有一个优先级的问题,我们需要在较低优先级的运算符两边添加空格(别指望提示,需要你自己判断)。空格最好是用一个,而且前后数量相等。如下:

代码语言:javascript
复制
x = x*2 - 1

4.指定关键字参数或者默认参数值的时候,不要在 =附近添加空格。

当然,规范中还有很多很多条目,这里只列出那些常用的、需要指出的部分。公司一般有自己的规范,严格按照文档进行编码即可。当然一些创业公司可能没有,建议你使用本规范,养成良好的编码习惯,工作中,看着也开心。最后祝愿大家代码无bug。

优质文章推荐:

redis操作命令总结

MySQL相关操作

SQL查询语句

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

DRF框架

Django相关知识点回顾

python技术面试题-腾讯

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • PEP8规范
    • 1.缩进
      • 2.行最大长度
        • 3.二元运算符
          • 4.空行
            • 5.源代码
              • 6.导入
                • 7.引号
                  • 8.表达式中的空格问题
                    • 9.注释
                      • 10.命名规范
                        • 11.其他的建议
                        相关产品与服务
                        云数据库 MySQL
                        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档