我最近注意到有些人使用pass
关键字标记缩进代码块的结尾,例如:
def f():
for i in range(10):
do_something(i)
pass
pass
我不明白为什么。有什么好处吗?
我知道pass
关键字不执行任何操作,它在其他语言中等同于{ }
。我的问题与一项公约有关。例如,也许人们喜欢标记长代码块的结尾。
答案 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"""