我想在Python中做這樣的事情。我拿出了我們真正在做的事情,並用這個永遠不會結束的荒謬例子取而代之。請假定來自< ==> b的呼叫是有限的。我們的代碼確實有結束這個循環的邏輯。python 2.7原型/前向參考
我很擔心我會在定義b之前調用b的錯誤。不過,我讀到,只要我沒有打電話執行一個之前的def b,那麼我應該沒有問題。這裏真正的答案是什麼?什麼是蟒蛇做幕後製作第2行就不會退出(B())
def a():
b()
def b():
a()
b()
我想在Python中做這樣的事情。我拿出了我們真正在做的事情,並用這個永遠不會結束的荒謬例子取而代之。請假定來自< ==> b的呼叫是有限的。我們的代碼確實有結束這個循環的邏輯。python 2.7原型/前向參考
我很擔心我會在定義b之前調用b的錯誤。不過,我讀到,只要我沒有打電話執行一個之前的def b,那麼我應該沒有問題。這裏真正的答案是什麼?什麼是蟒蛇做幕後製作第2行就不會退出(B())
def a():
b()
def b():
a()
b()
真正的答案是,b
的a
定義內將在模塊範圍內進行查找,類似的還有a
的b
定義內。由於a
和b
在處理完兩個定義後都存在於模塊範圍中,因此您的相互遞歸將起作用。
(它會停止,如果名稱a
和b
的函數定義裏面陰影的工作,但我相信你會設法避免。)
了Python作用域規則概述,請參閱this question。
太好了。兩者都解釋了它的工作原理和原因。 – Jake 2012-03-13 11:18:32
你爲什麼不試試這個呢?如果你真的不想在本地機器上處理這個問題,可以在http://ideone.com上試試。 – Marcin 2012-03-13 11:13:47
我測試過了。我顯然忘了添加關於它爲什麼起作用的部分。我編輯它。 – Jake 2012-03-13 11:16:35
@Jake:我沒有得到你編輯的最後一句話。爲什麼腳本會在第2行退出? – 2012-03-13 11:18:25