python 编码规范-代码的整体布局

2023-11-06

代码的整体布局主要囊括了代码在整体结构上应该注意的事项

缩进 空格/制表符

  1. Python 在语法上使用缩进来确定代码块的开始和结束
  2. 对于每一级缩进,应为 4 个空格,并且不要混用空格与制表符
  3. 缩进本身是一种语法上的限制,是强制性的
  4. 有的IDE会强制用tab进行缩进,并且在编译的时候转换为4个空格

悬挂缩进

  1. 括号内第一行不应放置元素
  2. 同级别的代码处于相同的缩进
  3. 当 if 等控制语句的条件部分需要换行时,可以使用括号将条件部分包裹起来,在括号内进行换行。

  4.  当多行结构在结束时,其右括号可以另起一行与前一行元素的第一个字符对齐或与第一行元素第一个字符对齐。

# 括号内第一行不应放置元素
def function_name(
    var_one, 
    var_two, 
    var_three, 
    var_four
    ):
    print(var_one, var_two, var_three, var_four)

# 同级别的代码处于相同的缩进
a = function_name(
    1, 
    2, 
)

# 使用括号将条件部分包裹起来,在括号内进行换行
if (
    cond1 and 
    cond2
    ):
    pass

# 右括号另起一行 与第一行的第一个字符对齐
one_list = [
    1, 2, 3, 
    4, 5, 6
]

行最大长度

所有行的最大长度应限制在 79 个字符以内,文档字符串和注释的最大长度应限制在 72 个字符以内。当一个代码行的长度超过限制时应进行换行,换行应优先使用括号内隐式换行,其次才是使用反斜杠。with 中有多个语句时,可使用反斜杠。

# 应优先使用括号内隐式换行
if (
    condition_one and 
    condition_two
    ):
    pass

# 不提倡下面的方式
if cond1 and \
   cond2:
    pass

# 下面 with 中有多个语句时,可使用反斜杠。
with open(path_one) as file_one, \
     open(path_one) as file_two:
    pass

公式很长时的换行

在二元运算符之前换行

result = (var_one
          - var_two
          + (var_three * var_four)
          - var_five)

代码之间的换行

  1. 模块级函数和类定义之间空两行;
  2. 类成员函数之间空一行;
  3. 可以使用多个空行分隔多组相关的函数
  4. 函数中可以使用空行分隔出逻辑相关的代码

导入import

  1. 导入的位置应在该文件头部,位于模块注释和文档字符串之后,全局变量和常量之前
  2. 对不同包或模块的导入,在代码结构上应该位于不同的行。针对同一个包或模块中进行的多个导入,可以位于同一行
  3. 如果你的代码中有多个导入,那么组织导入的整体顺序应首先为标准库导入,接着是相关第三方库导入,最后是本地代码导入。这三个部分之间可以用一个空行隔开
  4. 对于导入的形式,选择 import <module>.<name>from <module> import <name> 、from .<module> import <name> 均可(前两种形式称为绝对导入,最后一种称为相对导入或显式相对导入)。
  5. 推荐优先使用绝对路径进行导入(即绝对导入,absolute imports ),绝对导入的方式更具可读性,并且在导入系统配置不正确时可以表现得更好,比如给出更加清晰可读的错误信息。
  6. 在处理布局较为复杂的导入时,绝对路径的导入写法可能会造成导入语句过长,这时可考虑使用显式相对导入( explicit relative imports ),应避免使用隐式相对导入( implicit relative imports )
  7. 尽量避免使用 from <module> import * 的通配符导入写法,通配符导入的写法会使当前的命名空间变得混乱,可能会造成不必要的混淆。
  8. PyCharm 组织导入的快捷键 Ctrl + Shift + O调整导入的顺序

代码的编码声明

编码声明指的是类似 #coding: <encoding name>形式的声明

dunder 方法的位置

dunder 的含义,它是一个合成词,即双下划线 double-underscore 。dunder 方法便指的是 Python 中的特殊方法,也可称为魔术方法,这些方法以双下划线开始和结尾,在运算符重载、数据结构定义中起着重要的作用,常规方法来说,不应使用这种双下划线开始和结尾的形式

"""
module docstrings
"""

from __future__ import unicode_literals

__all__ = ['testa', 'testb']
__version__ = '1.0'
__author__ = 'zhangsan'

import json

引号、空格与逗号

单引号还是双引号?

对单引号和双引号没有特殊的使用要求,它们的作用是相同的

  • 自然语言 使用双引号 "..."
    例如错误信息;很多情况还是 unicode,使用u"你好世界"
  • 机器标识 使用单引号 '...'
    例如 dict 里的 key
  • 正则表达式 使用原生的双引号 r"..."
  • 文档字符串 (docstring) 使用三个双引号 """......"""
# 当一个字符串需要包含单或双引号时,应使用与最外层不同的引号,
# 来避免进行转义(转义会降低代码的可读性)
my_name = 'my name is "python"'

# 不提倡下面的方式
my_name = 'my name is \'python\''

表达式和语句中的空格

  • 在二元运算符两边各空一格[=,-,+=,==,>,in,is not, and]:
  • 函数的参数列表中,,之后要有空格
  • 函数的参数列表中,默认值等号两边不要添加空格
  • 左括号之后,右括号之前不要加多余的空格
  • 字典对象的左括号之前不要多余的空格
# 正确的写法
i = i + 1
submitted += 1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

# 不推荐的写法
i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

# 正确的写法
def complex(real, imag):
    pass

# 不推荐的写法
def complex(real,imag):
    pass

# 正确的写法
def complex(real, imag=0.0):
    pass

# 不推荐的写法
def complex(real, imag = 0.0):
    pass

# 正确的写法
spam(ham[1], {eggs: 2})

# 不推荐的写法
spam( ham[1], { eggs : 2 } )

# 正确的写法
dict['key'] = list[index]

# 不推荐的写法
dict ['key'] = list [index]

# 正确的写法
x = 1
y = 2
long_variable = 3

# 不推荐的写法
x             = 1
y             = 2
long_variable = 3

在多数场景中不应使用无关的空格

function_name('test', [1, 2, 3])

# 不提倡下面的方式
function_name( 'test' , [1, 2, 3] )
  1. 在切片操作中,冒号两边的空格数量应相同;
  2. 在扩展切片(step,称之为步长,默认为 1 )中,两个冒号应使用相同的空格数量;
  3. 当切片中的某个参数被省略时,对应位置不应使用空格
my_list[1:6], my_list[var_one + var_two : var_three + var_four]
my_list[1:6:2], my_list[: func_one(var_one) : func_two(var_two)]

# 不提倡下面的方式
my_list[1 :6], my_list[var_one + var_two:var_three + var_four]
my_list[1:6 :2], my_list[ : func_one(var_one) : func_two(var_two)]

不应为了对齐等号使用无关的空格

var_one = 1
long_var_two = 2

# 不提倡下面的方式
var_one      = 1
long_var_two = 2

在函数中,对于形参列表中的默认参数以及函数调用时的关键字参数,其 = 两侧不应使用无关空格。

def function_one(var_one=True):
    return var_one

function_one(var_one=False)

在运算符两侧合理使用空格

在赋值、增强型赋值、比较、布尔等二元运算符两侧应使用空格

var_one = 1
var_two = var_one + 1
var_one += 1

在同时使用不同优先级的运算符时,可在最低优先级的运算符两侧使用空格。对于一些比较复杂的场景下,需要我们来自己定夺空格的使用

var_two = var_one*3 + 1
var_five = var_one*var_two + var_three*var_four

# 注意下面的情况,PEP 8 把这种情况交由我们自己定夺,但仍给出了类似下面的示例供我们参考
var_five = (var_one+var_two) * (var_three+var_four)

# 不提倡下面的方式
var_five = (var_one + var_two) * (var_three + var_four)

在函数注解中合理使用空格

在函数注解中,冒号前不应使用无关空格,-> 两侧应使用空格

def function_one(var_one: bool) -> int:
    if var_one:
        ret = 1
    else:
        ret = -1
    return ret

当函数注解和默认参数同时存在于同一参数时,在 = 两侧应使用空格

def function_one(var_one: bool = True, var_two=False) -> int:
    pass

行尾部的逗号

当你想要获得包含一个元素的元组时,应在表达式尾部添加逗号,并最好将其包裹在圆括号内

var_one = (1,)

# 最好不使用下面的方式
var_one = 1,

对于某些包含参数并需要不断扩展的序列,在添加每个参数时,在其尾部也可添加逗号,这样可以规避一些难以发现的问题(请不要小看下方代码所示的问题,当它隐藏在某一段代码中时,你就会感到十分头疼)

# 当在新行中添加参数时,在尾部添加逗号有利于后续扩展,比如可避免漏写上一行结尾处逗号的问题
BACKENDS = (
    'BackendOne',
    'BackendTwo',
	)
# 在扩展时若漏写第二行结尾处的逗号,IDE 中也不会有任何提醒,但会导致无法正常使用该数据
BACKENDS = (
    'BackendOne',
    'BackendTwo'  
    'BackThree'
	)

复合语句

复合语句是指包含其他语句的语句,比如函数和类的定义、ifwhilefortrywith 等语句,不应将整个复合语句或复合语句中的一部分放置在一行

if var_one == 1:
    pass

# 不提倡下面的方式
if var_one == 1: pass

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 编码规范-代码的整体布局 的相关文章

随机推荐

  • 模型训练时间计算

    一 时间戳计算 记录当前时间 或者用 time perf counter 精度更高 import time t0 time time t0 time perf counter 记录结束时间 t1 time time t1 time perf
  • C# winform使用StreamWriter的方式将dataTable导出到Excel

    代码笔记 public void Export2Excel if this GridView logData Rows Count gt 0 SaveFileDialog saveFileDialog new SaveFileDialog
  • 【HAL库】STM32F103输出固定数量的PWM波形

    目的 用STM32F103ZET6的TIM1 CH1输出10个脉冲 实现方法主要有两种 一种用中断计数 一种用主从定时器门控方式 一 中断计数 首选需要选择合适的IO口 我选的是PE9 对应TIM1 CH1 然后在STM32CUBEMX里面
  • C++继承和多态特性

    文章目录 前言 1 什么是面向对象的继承特性 2 C 继承中的权限管控 3 继承体系下子类和父类的关系 4 派生类和基类的构造析构关系 5 派生类和基类的同名成员问题 6 子类和父类的类型兼容规则 7 继承的优势与不良继承 8 组合介绍以及
  • windows10家庭版远程桌面连接报错:CredSSP加密oracle修正

    原地址 https www cnblogs com lindajia p 9021082 html Windows10远程桌面连接 报错信息 网上找到方法 但是奈何是 Win10家庭版 不能使用这个办法 具体操作可以看最后的引用链接 策略路
  • 【应急响应】后门攻击检测指南&Rookit&内存马&权限维持&WIN&Linux

    文章目录 Windows实验 常规后门 网络对外连接查看 自启动测试 隐藏账户 映像劫持 屏保 登录 Linux实验 常规后门 Rootkit后门 GScan rkhunter 权限维持后门 GScan rkhunter Web层面 通用系
  • 秋叶大神的Stable Diffusion整合包

    前段时间在研究Stable Diffusion本地化部署 但是对于新手小白来说算是比较难得 不过没关系 我在B站发现了秋叶大神的Stable Diffusion整合包 我在用很方便 必须分享出来 Stable Diffusion整合包下载地
  • 基于vue的页面加载动画

    基本原理是 在window加载之前 渲染出加载动画 页面渲染完成后 移除加载动画即可 在vue项目中一般只需二步 第一步 写css和dom 在vue项目的index html中引入css 第二步 在app vue created中移除加载动
  • pytorch_lighting

    1 pytorch lighting 简介 1 1 pytorch lighting 是什么 1 1 1 pytorch lightning 是什么 PyTorch Lightning 是一个开源的 PyTorch 加速框架 它旨在帮助研究
  • vue+Element-ui实现树形组件、表格树

    需求 要做出如下图所示的 树形表格 也就是数据之间有父子类关系的这种 可以点击展开 收缩 像上图这样的表格树 实现 1 使用树形组件 在学习树形表格之前 肯定得先搞懂普通的树形组件是怎么搞的 然后将其套到表格中就好了 请参考ElementU
  • linux real时间,【整理】RT-linux 实时Linux RealTime Linux

    折腾 整理 数控系统 操作系统 期间 看提到了RT linux 去研究看看 RT linux Vanilla kernel的问题 Linux kernel在spinlock irq上下文方面无法抢占 因此高优先级任务被唤醒到得以执行的时间并
  • 力扣刷题:两数相加

    给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以 0 开头 输入 l1
  • Android Studio Proxy Setting 设置(详细图文说明)

    Android Studio代理设置 Android Studio Proxy Setting 设置 在很多时候编译依赖的相关库文件都是需要墙出去的 所以我们得学会怎么翻 具体可以查查网上很多详细的攻略 这里只介绍墙完后Android St
  • 【深入理解C++】空类对象所占用的空间大小

    文章目录 1 须知 2 空类对象所占用的空间大小 3 一个类继承空类 4 空类作为另一个类的成员 1 须知 类本身是没有大小的 类的大小指的是类的对象所占的大小 如果用 sizeof 运算符对一个类型名操作 得到的是具有该类型实体的大小 2
  • 移植4- uboot之网卡驱动移植

    linux 中 网络分为许多层 网卡处理物理与DATA LINK层 linux驱动就是将DATALINK层的数据包送到TCP IP层进行处理 主要是通过struct net device这个结构 struct net device实现了支持
  • 字符串转化使用String.valueOf(value) 代替 “ “ + value

    文章目录 把其它对象或类型转化为字符串时 使用String valueOf value 比 value 的效率更高 把其它对象或类型转化为字符串反例 int num 520 value String strLove num 把其它对象或类型
  • 2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

    HTML CSS相关 HTML5 HTML5新特性 增强了表单 input新增了一些type color 定义调色板 tel 定义包含电话号码的输入域 email 定义包含email地址的输入域 search 定义搜索域 number 定义
  • innodb索引概念

    author skate time 2013 04 09 总结记录下innodb的索引概念 以备查看 innodb索引分类 聚簇索引 clustered index 1 有主键时 根据主键创建聚簇索引 2 没有主键时 会用一个唯一且不为空的
  • Qt+Pyhton实现麒麟V10系统下word文档读写功能

    目录 前言 1 C 调用python 1 1 安装Python开发环境 1 2 修改Qt工程配置 1 3 初始化Python环境 1 4 C 调用Python 函数 1 5 常用的Python接口 2 python虚拟环境 2 1Pytho
  • python 编码规范-代码的整体布局

    代码的整体布局主要囊括了代码在整体结构上应该注意的事项 缩进 空格 制表符 Python 在语法上使用缩进来确定代码块的开始和结束 对于每一级缩进 应为 4 个空格 并且不要混用空格与制表符 缩进本身是一种语法上的限制 是强制性的 有的ID