2017-12-16 7 views
-1

이 코드는 CodeChef twitter https://twitter.com/codechef/status/941329495046459395에서 발견되었습니다. 그것은 C로 작성되었습니다. 나는 Python3에서 그것을했습니다. 여기 내 코드입니다 :스왑이 발생 했습니까?

def vegas(a,b): 
    temp = a 
    a = b 
    b = temp 
a = 6 
b = 9 
print(a,b) 
vegas(a,b) 
print(a,b) 

그리고 이것은 대답입니다 :

6 9 
6 9 

내 질문입니다, 내 '라스베가스'기능은 변수 'A'와 'B'

의 값을 교환되지 않는 이유
+1

return 문을 추가하십시오. https://www.tutorialspoint.com/python/python_functions.htm – kometen

+0

vegas 함수에서'return a, b'와 끝을 넣고'print (vegas (a, b)) '를 사용하십시오 –

+1

[Function 변수 값 변경] (https://stackoverflow.com/questions/27462805/function-to-change-values-of-variables) – JJJ

답변

2

의도 한대로 작동하지 않습니다. This question이이 문제에 대해 전체적으로 답변하고 있습니다. 요약하자면, 파이썬은 인수 abvegas에서만 볼 수있는 두 개의 변수로 변환합니다. 그것들은 ab의 값으로 시작하지만, 외부의 ab 변수와 관련이 없습니다.

코드를 작동하게하려면 다음을 수행하십시오

def vegas(a,b): 
    temp = a 
    a = b 
    b = temp 
    return a,b 
a = 6 
b = 9 
print(a,b) 
a,b = vegas(a,b) 
print(a,b) 

을 또한, 당신은 당신이 a,b = b,a

1

예와 함께 두 개의 값을 바꿀 수 있다는 것을 알고 관심이있을 수도없고 ... 기능 라스베가스 일을하지만 결코 a와 b를 반환하지 않으므로 a와 b는 여전히 외부의 6과 9입니다. 당신은 more here

+1

올바르지 않습니다. **는 ** 참고로 전달되지만 참조는 값 6과 9에 대한 포인터 일 뿐이며 python은 함수의 범위 내에서 볼 수있는 새로운 변수를 만듭니다. 나는 이것이 Google 인터뷰에서 잘못했기 때문에 이것이 어려운 방법을 배웠습니다. :) – hansaplast

+1

그건 올바른 인수가 파이썬에서 할당에 의해 전달됩니다. 그러나 나의 연결은 정확하다. 나는 내 대답을 편집했다. –

1

이 코드 볼 수 있습니다 Arguments are passed by assignment in Python.

는 함수가 변수의 값에 영향을 미치지 않기 때문에 "무슨 라스베가스에서 일어나는 것은 라스베가스에 남아"고 농담이다. 값에 영향을 주려면 함수가 스왑의 결과를 반환해야합니다. return 문이 없으면 함수가 함수 내에서 사용할 자체 임시 변수를 만들기 때문에 함수는 변수에 영향을 미치지 않습니다.

+0

두 개의 기존 답변에 동일한 내용이 이미 언급되어있는 이유는 무엇입니까? – hansaplast