python - `pass` 标记缩进代码块结束的关键字

标签 python coding-style

我最近注意到有些人用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/

相关文章:

python 检查列表元素的存在

python - Pyramid 事务管理器未提交更新

python - 如何获得最大可能的精度? (Python - 十进制)

将常规 C 风格编码文件转换为 GNU 风格编码标准

python - pylint W0622(重新定义内置)在子类中重写 "standard"方法时

Python Twisted DatagramProtocol UDP 客户端重新连接

sql - LINQ 查询 : SQL-style abbreviations or spell it out?

ruby - 如何避免类和全局变量

c - 了解声明数组长度

javascript - 点击交互式chart.js条形图并获取JS中标签和组的值