2014-12-07 1 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: 25 
LINE A: 25 
LINE B: 676 
676 
LINE E: 676 

을, 내가 가진 매개 변수 x를 할당 : 나의 이해에서

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

, 그것은이 다음 반환해야합니다 더블 엑스. There, if 이름이 == ''인 경우 : function, print ("LINE D :", x)는 이전에 호출 된 사각형 (x)에 의해 반환 된 x를 인쇄한다고 가정합니다. 그러나 웬일인지 이것이 그렇지 않은 경우, 내가 뭘 잘못 했는가? 아니면 내 이해가 잘못 되었습니까?

P. 나는 정확하게 기능을 수정하려고하지 않습니다. 나는 왜 그것이이 방법으로 작동하는지에 대한 설명을 찾고 있습니다.

+1

대신'x = square (x)'를 써야합니다. – fenceop

+0

나는 정확하게이 기능을 수정하려고하지 않았다. 나는 왜 그것이이 방법으로 작동하는지에 대한 설명을 찾고 있습니다. – amundi12

+0

'square()'함수는'main()'에있는'x' 변수를 직접 조작하지 않습니다. 대신 값을 복사하고 이것을'x'라고하는 지역 변수에 할당합니다. 'x' (main)은 여러분이'square (x)'의 반환 값을 지정하지 않는 한 변경되지 않습니다. – fenceop

답변

0

파이썬의 각 기능에는 고유 범위가 있습니다. 이 경우 square에있는 x은 main에있는 x과 다릅니다. square(x)으로 전화하면 x (주)은 x (정사각형)으로 복사됩니다. square의 문은 로컬 x 만 업데이트합니다.