【问题标题】:Python PEP: blank line after function definition?Python PEP:函数定义后的空行?
【发布时间】:2013-09-25 16:25:59
【问题描述】:

我找不到任何有关此详细信息的 PEP 参考。函数定义后必须有一个空行吗?

我应该这样做吗:

def hello_function():
    return 'hello'

或者我应该这样做:

def hello_function():

    return 'hello'

使用文档字符串时同样的问题也适用:

这个:

def hello_function():
    """
    Important function
    """
    return 'hello'

或者这个

def hello_function():
    """
    Important function
    """

    return 'hello'

编辑

正如 FoxMaSk 所评论的那样,这是 PEP 在空白行上所说的内容,但它没有说明这个细节。

空白行

用两个空格分隔顶级函数和类定义 行。

类中的方法定义由一个空格分隔 行。

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

在函数中谨慎使用空行来表示逻辑部分。

Python 接受 control-L(即 ^L)换页符作为 空白;许多工具将这些字符视为页面分隔符,因此 您可以使用它们来分隔文件相关部分的页面。 请注意,某些编辑器和基于 Web 的代码查看器可能无法识别 control-L 作为换页符,并将在其位置显示另一个字形。

【问题讨论】:

  • 我把它读作“你不要不要浪费空间的空行,除非这些罕见的例外之一适用”。来吧——将def与代码分开真的提高了可读性吗?
  • 我绝对认为这是一个详尽的列表,列出了可以放置垂直空白的所有位置。话虽如此,我会根据它们的来源在导入之间放置一个空行。将核心 python 库、第 3 方库和本地库组合在一起。按此顺序。

标签: python coding-style styles pep


【解决方案1】:

阅读Docstring Conventions

它说即使功能非常明显,您也必须编写一个单行文档字符串。它说:

文档字符串前后都没有空行。

所以我会编写类似的代码

def hello_function():
    """Return 'hello' string."""
    return 'hello'

【讨论】:

  • 我在文档中找不到任何说明您必须编写文档字符串的内容,即使对于非常明显的功能也是如此。我是文档字符串的忠实粉丝,但如果文档字符串不能增加任何可读性,我会完全忽略它。我以前见过这个:``` def set_main_window_icon(self, icon_path): """设置主窗口图标。""" ```那是浪费行。我知道 hello_function 是一个人为的发明,但我担心通过示例来鼓励这种文档字符串。
  • 但是如果你的函数在某处已经有空行,我绝对建议在文档字符串之后放置空行。
【解决方案2】:

正如@moliware 所指出的,Docstring Conventions 状态,在One-line Docstrings 下:

文档字符串前后都没有空行。

但是,它还说(在Multi-line Docstrings 下):

记录一个所有文档字符串(单行或多行)之后插入一个空行——一般来说, 类的方法之间用一个空行分隔,并且文档字符串需要从第一个方法偏移一个空行。

我对这一切的解释:空行不应该在任何文档字符串之前,并且应该只在一个类的文档字符串之后。

【讨论】:

    【解决方案3】:

    项目使用不同的文档字符串约定。

    例如,pandasdocstring guide 明确要求您将三引号单独放在一行中。

    文档字符串必须用三个双引号定义。文档字符串之前或之后不应有空行。 文本从左引号后的下一行开始。结束引号有自己的行(意味着它们不在最后一句的末尾)。

    【讨论】:

      【解决方案4】:

      让 python 脚本同时遵守 pydocstylepycodestyle 是一项挑战。但是有一件非常有帮助的事情是,在您的文档字符串中将第一行作为函数或类的摘要写在 79 个字符内,包括 .。这样您就可以同时遵守 PEP 257(根据 pydocstyle)连续行的结尾和 PEP 8 的 79 个字符限制(根据 pycodestyle)。

      然后在留下一个空白行之后(因为使用你的编辑器的新行快捷方式比手动按enter 更好)你可以写任何你想要的东西,当时只关注pycodestyle,这比@稍微容易一点987654328@ 主要是因为我们使用的各种代码编辑器中的缩进设置、制表符设置、行设置,我们对行和缩进的理解与系统理解的有很大不同。所以这样你就会有TODO来自pycodestyle 你理解并且可以纠正,而不是在pydocstyleTODOs 上撞墙。

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 2013-03-31
        • 2013-05-21
        • 2020-06-17
        • 2014-01-28
        • 1970-01-01
        • 2016-12-26
        • 2015-05-03
        • 1970-01-01
        相关资源
        最近更新 更多