2014-03-06 74 views
1

我對Python中下面給出的代碼感到困惑,在這個代碼中,函數在定義之前被調用。可能嗎?是否因爲函數沒有返回值?在定義之前調用的Python函數

from Circle import Circle 

def main(): 
    myCircle = Circle() 
    n = 5 
    printAreas(myCircle, n) #The function is called here 

def printAreas(c, times): 
    xxxx 
    xxxx 

main() 
+1

是什麼讓你覺得函數在它的定義之前被調用? –

+2

它不是。它在調用main時調用,它在程序的最後。 –

+0

嘗試在* printAreas'的定義之前將* call *移動到'main' *,如:main()def printAreas(...):...'。 – Bakuriu

回答

3

在你的程序會發生什麼:

  1. main定義,用在其身上音符printAreas的參考,這僅僅是一個參考,不是一個電話
  2. printAreas定義
  3. main被調用
  4. main調用printAreas

所以一切都很好 - 只要您確保這些名稱在包含該代碼的代碼被定義(綁定到一個值)時就被允許在任何時候引用您想要的任何名稱參考執行:

def foo(): 
    print bar # reference to as-of-yet non-existent bar 

# calling foo here would be an error 

bar = 3 

foo() # prints 3 
+0

非常感謝。這很明顯。 – user3389332

0

Python將首先解析您的文件,將所有函數,變量等註冊到全局名稱空間中。它會然後調用main函數,然後將調用printAreas。那時,這兩個函數都在你的腳本命名空間中,因此完全可以訪問。

讓你感到困惑的事情就是閱讀順序。

0

您在程序結束時致電main。這允許解釋器加載所有功能,然後啓動main功能。

相關問題