Python PEP8:空行约定

85

我想了解Python中关于程序部分之间换行的约定是什么?例如,考虑以下代码:

import os

def func1():

def func2():

在以下情况下,应该采用何种换行符号分隔:

  1. import 模块和函数之间?
  2. 函数本身内部的代码之间?

我已经阅读过 PEP8,但我想确认上述两个问题。


你读过标准库中的哪些模块?许多都是Python编码风格的绝佳示例。你检查了哪些模块? - S.Lott
3
我正在查看 os.py 文件,发现只使用了一个换行符,所以我才提出这个问题。 - user225312
直接链接到PEP8中关于空行的章节:https://www.python.org/dev/peps/pep-0008/#blank-lines - Martin Thoma
这方面的内容到处都有,但我似乎找不到任何关于导入和后续全局常量之间应该有多少行的约定。是在导入后有两个空行,然后在常量后再有两个空行,还是...?? - NeilG
3个回答

110
  1. 在导入语句和其他代码之间留下两个空行。
  2. 在每个函数之间留下两个空行。

22
仅做一个小澄清。在上述情况中,您在导入后放置了2个空行是由于函数造成的。PEP8规定您必须用2行括起顶层函数,但是如果您有一个常量/全局变量,而不是那些函数,它可以很容易地被压缩为1行。从我的角度来看,最重要的是没有绝对要做某件事情,特别是涉及风格的主观话题,但您应该始终保持一致,与您正在开发的项目相一致。 - Marius Mucenicu
7
截至2022年2月,PEP8实际上规定:“顶级函数和类定义周围需要两个空行”,而“类内方法定义之间需要一个空行。” - Xerxes

87

如果您查看PEP8的'Blank Lines'部分,您会发现以下内容:

顶级函数和类定义周围应该有两个空行。

类内方法定义周围应该有一个空行。

可以使用额外的空行(谨慎使用)来分隔相关函数组。在一堆相关的单行实现之间可以省略空行(例如一组虚拟实现)。

在函数中适度使用空行以表示逻辑部分。

关于imports,PEP8规定如下:

导入通常应位于单独的行上

...

按以下顺序分组导入:

  1. 标准库导入
  2. 相关的第三方导入
  3. 本地应用程序/库特定导入

应在每组导入之间放置空行。

因此,对于您的示例,符合PEP8规范的格式如下:

import os


def func1():


def func2():

仅为更全面的说明:

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass

3

这篇回答讲解得非常清楚明白。

只需要进行简单的修改即可。

#Standard system imports
import re
import glob
import sys

#Related third party imports
import requests
import scrapy
from flask import Flask

#Local application/library specific imports
from my_local_module import MyClass1, MyClass

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接