2013-11-20 80 views
0

我有兩個基本問題,我在參考文檔中找不到。功能:哪裏可以/必須聲明?

def()可以位於腳本中的任何位置,即使是在其他一些語句中間嗎?

定義的物理位置必須位於函數被調用的任何語句或表達式之前?

+0

它可以位於其他函數,塊語句中。然而,將後者或放在腳本中的任何地方都不是一個好主意。讓你的代碼看起來很亂。 – aIKid

回答

4

你可以在任何地方放置一個函數定義。重要的是該名稱的可見性。

A def functionname():複合語句包含一個隱含的functionname = functionobject(function code)賦值;名稱functionname被綁定到一個新的函數對象。

每當你想使用functionname(調用它,或以其他方式提到它),名稱必須是可見。這意味着您可以按任意順序定義函數,只要它們在調用時可到達即可。

例如:

def spam(): 
    baz() 

def foo(): 
    def bar(): 
     print "Hello world!" 
    return bar 

baz = foo() 
spam() 

作品,因爲spam()不叫,直到結束。它使用名稱爲baz,這是一個全球性的,baz被綁定到foo()的結果,在spam()被定義之後,但在spam()被調用之前。

foo我們定義了一個函數bar(),而返回了它。 barfoo中的局部變量,在該函數外部不可見,但因爲我們返回了函數對象,所以我們可以將它分配給全局名稱。

換句話說,函數遵循與Python中的常規變量相同的規則;大多數情況下,您將它們定義爲全局變量,但您也可以在函數內部創建它們。