2014-12-07 91 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