2016-01-24 52 views
1

我发现蟒蛇一个有趣的一段代码:为什么python会在`pass`后继续评估代码?

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

x(True) 

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

+0

http://stackoverflow.com/questions/13886168/how-to-use-the-pass-statement-in-python –

+0

@Downvoters为什么?我知道'pass'函数是如何工作的(占位符说'我需要一个实现!'),我只是不知道这是如何工作的。 –

回答

8

按照Python文档:

pass是一个空操作 - 在执行时,没有任何反应。

来源 - pass仍然会执行后https://docs.python.org/3.5/reference/simple_stmts.html#pass

因此,pass没有做任何事情,所有的语句。

思考这个的另一种方式是,pass等同于任何虚拟声明:

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

有趣的是,我认为'pass'是一个关键字占位符。 –

+1

我可以看到这个名字有点混乱,但是那个文档有帮助! – miki725

+0

是的,但是因为我认为'pass'是一个关键词,所以我没有在文档中查找;) –

4

通并不意味着“退出功能”,它只是意味着什么都没有。把它想象成一个占位符,说你在那里不做任何事情(例如,如果你还没有实现)。 https://docs.python.org/3.5/tutorial/controlflow.html#pass-statements

如果你想退出该功能,您只需returnreturn None

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

+0

是的,我知道所有这些,我只是看到了这个代码,并不知道它做了什么(我很少使用python)。 –

+0

通常你有两个使用pass的理由:你想在将来实现一些东西,所以你创建了一个函数并且将它留空,或者需要这个函数,因为可能发生在你刚刚创建的对象上的操作,因为你没有用处。 – Mijamo

0

通过什么都不做。当程序到达时,它说“好吧,跳过这个!”。

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

def function_somebody_is_going_to_write_later(): 
    pass 

def function_I_am_going_to_write_later(): 
    pass 

这样,你可以写其他人以后可能工作在函数的文件,你仍然可以执行该文件现在。

+0

btw另一种定义函数的方法是简单地添加文档字符串。在这种情况下,'pass'不是必需的。 – miki725

+0

有趣。这在Python 2.7中可用吗? – Anton

+0

是的。这在所有Python 2.x和3.x中都是有效的。这个技巧btw在为abc类编写测试时非常有用:例如http://stackoverflow.com/questions/21351626/how-can-i-test-an-abstract-method-in-python-2-6 – miki725

相关问题