我最近注意到有些人用pass
关键字来标记缩进代码块的结尾,例如:
def f():
for i in range(10):
do_something(i)
pass
pass
我不明白为什么。有什么优势吗?
我知道 pass
关键字什么都不做,它等同于其他语言中的 { }
。我的问题与公约更相关。例如,也许人们喜欢用一些东西来标记长代码块的结尾。
最佳答案
你认为Python的缩进敏感语法有害吗?
如果您的回答是“否”,
然后使用 pass
来标记结束只会使 cleanness 变得困惑
由 Python 的缩进敏感语法引入。
如果您的回答是"is",
然后使用 pass
标记结束是 歧义 的解决方法
由 Python 的缩进敏感语法引入。
在 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
是缩进 block 的最后一个子句,print(i)
在上面的代码中看起来很奇怪。如果您输入
pass
,一个好的编辑器/IDE 会正确缩进。
对于第二个通过
,
如果 f()
是顶级函数,
并且您的代码符合 PEP8:
Surround top-level function and class definitions with two blank lines.
你可以省略第二个pass
。
但是PEP8还说:
Extra blank lines may be used (sparingly) to separate groups of related functions.
因此我更喜欢pass
。
关于python - `pass` 标记缩进代码块结束的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22895340/