2016-01-24 54 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

相關問題