官网PEP8编码规范解释

本文详细介绍了Python的PEP8编码规范,涵盖缩进、空白行、引号、避免不必要空格、注释、命名规范和函数返回值等方面。如缩进用4个空格,函数末尾或类定义末尾加空白行,注释要与代码一致等,还给出了正反示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PEP8 编码规范详解

import this 看一下python之禅。

1.缩进

  • 用Tab表示缩进是一场灾难
  • 和语法相关的每一层缩进用4个空格表示
  • 二元运算符左右两侧应当有且只有一个空格
  • 表达式内容太多时(不超过79个字符),除了首行外,其他各行应当缩进

Yes:首行有参数,第二行与首行左括号对齐

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

Yes:首行无参数,第二行添加4个额外的4个空格缩进,与其余部分区分

def long_function_name(
        var_one,var_two,var_three,
        var_four):
    print(var_one)

Yes:

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

NO:首行有参数,未和左括号对齐

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

NO:参数额外缩进4个空格,易混淆,可读性差

def long_function_name(
    var_one,var_two,var_three,
    var_four):
    print(var_one)
  • 当运算符表达式过长时,运算符和其后的操作数一同换行,易于将运算符和操作数匹配

    income = (gross_wages
    + taxable_interest
    + (dividends - qualified_dividends)
    - ira_deduction
    - student_loan_interest)

2.空白行

  • 通常在函数末尾或者类定义末尾增加空白行

3.引号

  • python中单引号和双引号是相同的,可以选择一个规则使用。
  • 同一字符串中包含了双重引号时,应当使用不同的隐含,避免出现反斜杠,提高可读性

4.避免不必要空格

Yes: spam(ham[1], {eggs: 2})
No:  spam( ham[ 1 ], { eggs: 2 } )

Yes: foo = (0,)
No:  bar = (0, )

Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x
  • 切片操作符冒号左右左右两侧空格应该对称

  • 省略某一参数时,空格也应当省略

    Yes:ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3]
    No:ham[1: 9], ham[1 :9], ham[1:9 :3]

Yes:

y = 2
long_variable = 3

No:

y             = 2
long_variable = 3
  • 避免在行末尾增加空格,不可见,让人困惑

  • 二元运算法两边始终保留一个空格:赋值assignment (=), 扩展赋值augmented assignment (+=, -= etc.), 比较comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔运算 (and, or, not),注意,高级运算级通常两侧没有空格,如乘、除、乘方、取余等

  • 当包括优先级不同的运算符时,仅在低优先级运算符号两侧增加空格

  • 如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。

    Yes:

i = i + 1
q += 1

x = x*2 + X**3 + 1
c = (a+b) * (a-b)

No:
i=i+1
x = x * 2 - 1
  • 用于指示关键字参数时,或者用于确定关键字参数默认值时,=两侧不加空格
    Yes:

def complex(real,imag=0.0):
return magic(r=real,i=imag)

No:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)
  • 避免在同一行内有复合表达式,应当在:末尾换行。分开两行更清晰
    Yes:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()
    

No:

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

5.注释

  • 和代码相矛盾的注释,不如没有注释
  • 在修改代码时,首先应当修改注释
  • 尽量用英语注释,养成好习惯

6.命名规范

  • 不要使用小写l,大写O,单字母表述容易混淆
  • 类的命名应当首字母大写,函数名称应当小写,可以使用下划线分割增加可读性
  • 函数第一个参数应当始终是self
  • 函数名与关键字重复时,在函数名后加_
  • 常量全部大写,使用下划线分割

7.函数返回值

  • 函数应当标明return语句,return None不可以省略None

Yes:

def foo(x):
    if x >= 0:
        return math.sqrt(x)
    else:
        return None

def bar(x):
    if x < 0:
        return None
    return math.sqrt(x)

No:

def foo(x):
    if x >= 0:
        return math.sqrt(x)

def bar(x):
    if x < 0:
        return
    return math.sqrt(x)
  • 使用startswith()和endswith()检查前后缀,不要用字符串切片
  • 使用isinstance()检查某对象类型
  • 检查是否为空,应当用if seq,不使用if len(seq)==0,即不要用验证长度的方法检查是否为空

翻译整理自官方文档:https://www.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值