`pass`关键字标记缩进代码块的结尾

时间:2014-04-06 14:24:56

标签: python coding-style

我最近注意到有些人使用pass关键字标记缩进代码块的结尾,例如:

def f():
    for i in range(10):
        do_something(i)
        pass
    pass

我不明白为什么。有什么好处吗?

我知道pass关键字不执行任何操作,它在其他语言中等同于{ }。我的问题与一项公约有关。例如,也许人们喜欢标记长代码块的结尾。

3 个答案:

答案 0 :(得分:3)

您认为Python的缩进敏感语法是否有害?

如果你的回答是" no" , 然后使用pass标记结尾只会使清洁混乱 由Python的indention敏感语法引入。

如果您的答案是"是" , 然后使用pass标记结尾是歧义的变通方法 由Python的indention敏感语法引入。

在Python中,没有{}end,而是语义空格。

例如,请考虑以下Ruby代码:

def f
    for i in 0...10
        i = i * 2
        print(i)
    end
end

等效的Python代码:

def f():
    for i in range(10):
        i = i * 2
        print(i)

有一次错误的击键(TAB):

def f():
    for i in range(10):
        i = i * 2
    print(i)

以上代码也有效。

为了避免这种错误,我们可以在Python中使用pass end

def f():
    for i in range(10):
        i = i * 2
        print(i)
        pass
    pass

有一次错误的击键(TAB):

def f():
    for i in range(10):
        i = i * 2
    print(i)
        pass
    pass

Python将拒绝工作:

IndentationError: unexpected indent

但是,即使使用pass,python也不会总是出现意外缩进。

假设我们打算写:

def g():
    for i in range(10):
        i = i * 2
        pass
    print(i)
    pass

有一次错误的击键(TAB):

def g():
    for i in range(10):
        i = i * 2
        pass
        print(i)
    pass

Python将拒绝工作。

但使用pass仍然有两个好处:

  • 它仍然提供视觉提示。

    如果您认为pass是缩进块的最后一个子句, print(i)在上面的代码中看起来很奇怪。

  • 如果您输入pass,正确的编辑器/ IDE会正确缩进。

对于第二个pass, 如果f()是顶级函数, 并且您的代码遵循PEP8:

  

使用两个空行环绕顶级函数和类定义。

您可以省略第二个pass

但PEP8也说:

  

可以使用额外的空行(谨慎)   分开相关功能组。

因此我更喜欢pass

答案 1 :(得分:2)

  

有什么好处吗?

没有。

pass放在非空代码块的末尾,就像浪费行一样。请记住,pass是Python中的do-nothing占位符;它只应在需要填写空代码块时使用。

如果您想了解何时使用pass的示例,请参阅此SO question以及此one

答案 2 :(得分:2)

没有优势。如果该函数具有正文,则添加pass不会执行任何操作。如果有 no 正文,它甚至不做任何事情,除了帮助解析器知道空体是故意的。

在现实世界的代码中,使用文档字符串通常比pass更好地表示故意空代码:

class MyExtraException(Exception):
    """Just another exception"""