2014-12-07 57 views
0
>>> def square(x): 
     print('LINE A:', x) 
     x = x*x 
     print("LINE B:", x) 
     return x 


>>> if __name__ == '__main__': 
     x = 5 
     print("LINE C:", x) 
     square(x) 
     print("LINE D:", x) 
     square(x + 1) 
     print("LINE E:", x) 

產地:返回值

LINE C: 5 
LINE A: 5 
LINE B: 25 
25 
LINE D: 5 
LINE A: 6 
LINE B: 36 
36 
LINE E: 5 

在我的理解,它應該返回如下:

LINE C: 5 
LINE A: 5 
LINE B: 25 
25 
LINE D: 25 
LINE A: 25 
LINE B: 676 
676 
LINE E: 676 

在第一(頂部)函數,我分配參數x與X * X。 Therefeore,if name =='main':function,print(「LINE D:」,x)假設打印由之前調用的方形(x)返回的x。但由於某種原因,情況並非如此,我做錯了什麼?還是我的理解是不正確的?

P.S.我並不是完全想要糾正這個功能。我只是找到一個解釋,爲什麼它以這種方式工作。

+1

您需要改寫'x = square(x)'。 – fenceop 2014-12-07 20:10:18

+0

我並不是完全想要糾正這個功能。我只是找到一個解釋,爲什麼它以這種方式工作。 – amundi12 2014-12-07 20:13:39

+0

'square()'函數不直接操作駐留在main()中的'x'變量。相反,它會複製其值並將其分配給也稱爲「x」的局部變量。 'x'(main)保持不變,除非你給它賦予'square(x)'的返回值。 – fenceop 2014-12-07 20:21:02

回答

0

python中的每個函數都有自己的作用域。在這種情況下,square中的x與主要中的x不同。當您致電square(x)時,main中的x被複制到方塊中的xsquare中的x = x*x聲明僅更新本地x