2013-12-20 32 views
0
def makeInc (x, step): 
    def next(): 
     nonlocal x, step 
     x = x + step 
     return x 
    return next 

x = makeInc (0, 1) 
y = makeInc (0, 10) 

x1=x() 
x2=x() 
y1=y() 
y2=y() 

print(x1, x2, y1, y2) 

輸出是1 2 10 20. 我不確定它爲什麼給出這些輸出,有誰能詳細解釋一下嗎?謝謝!爲什麼這個python程序有以下輸出?

+0

引發語法錯誤。 – Hariprasad

+0

@Hariprasad它爲我工作正常。我正在使用Python 3.3.1,您使用的是哪個版本? – steveha

+0

'Pyhton 3.3.3' – Hariprasad

回答

0

函數makeInc()是一個「工廠」,它使函數對象返回並返回它們。聲明使得函數「關閉」一個變量。通常你會做一個明確的變量並關閉它;在這種情況下,nonlocal聲明將關閉從makeInc()的參數變量。

如果您想了解封鎖和nonlocal這裏有幾個引用:

http://www.mondoinfo.com/blog/C182263547/E20060918200706/index.html

Python nonlocal statement

所以,makeInc()使得具有起始值和一個「臺階」函數對象由此起始值將被增加。一旦你創建了自定義函數對象,最終代碼將調用這些函數並獲取遞增值。

相關問題