【问题标题】:Why does python keep evaluating code after `pass`?为什么python在`pass`之后继续评估代码?
【发布时间】:2016-01-24 00:44:15
【问题描述】:

我在python中发现了一段有趣的代码:

def x(cond):
    if cond:
        pass
        print('Still running!')

x(True)

我希望这不会打印任何内容,但它会打印 Still running!。这里发生了什么?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

根据 Python 文档:

pass 是一个空操作——当它被执行时,什么也没有发生。

来源 - https://docs.python.org/3.5/reference/simple_stmts.html#pass

因此,pass 不做任何事情,pass 之后的所有语句仍将被执行。

另一种思考方式是pass 等同于任何虚拟语句:

def x(cond):
    if cond:
        "dummy statement"
        print('Still running!')

【讨论】:

  • 有趣,我以为pass 是关键字占位符。
  • 我可以看到这个名字有点令人困惑,但这就是文档的帮助!
  • 是的,但是因为我认为 pass 是一个关键字,所以我没有在文档中查看 ;)
【解决方案2】:

pass 并不意味着“离开函数”,它只是意味着......什么都没有。将其视为一个占位符,表示您在那里不做任何事情(例如,如果您还没有实现某些东西)。 https://docs.python.org/3.5/tutorial/controlflow.html#pass-statements

如果你想退出函数,你只需returnreturn None

顺便说一句,其他有用的语句是break 退出最新的循环,continue 退出当前的循环迭代并直接进入下一个循环。

【讨论】:

  • 是的,我知道所有这些,我只是看到了这段代码,不知道它做了什么(我很少使用 python)。
  • 通常你有两个理由使用 pass :你想在将来实现一些东西,所以你创建函数并将它留空,或者因为你的对象可能发生的操作而需要该函数只需创建它,但将其留空,因为您对它没有用处。
【解决方案3】:

Pass 什么都不做。当程序到达那里时,它会说“好的,跳过这个!”。

Pass 可用于提前定义函数。例如,

def function_somebody_is_going_to_write_later():
    pass

def function_I_am_going_to_write_later():
    pass

这样您就可以编写一个文件,其中包含其他人以后可能会使用的功能,并且您现在仍然可以执行该文件。

【讨论】:

  • 顺便说一句,定义函数的替代方法是简单地添加一个文档字符串。在这种情况下,pass 是不必要的。
  • 有趣。这在 Python 2.7 中可用吗?
  • 是的。这在所有 Python 2.x 和 3.x 中都有效。顺便说一句,这个技巧在为 abc 类编写测试时非常有用:例如 stackoverflow.com/questions/21351626/…
猜你喜欢
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多