2016-11-22 4 views
0

저는 파이썬에 처음이므로 질문하겠습니다.피보나치에서 a, b = b, a + b와 a = b, b = a + b의 차이점은 무엇입니까? [파이썬]

I는 피보나치 함수를 작성하면서

은 이전 I는

a = b 
b = a + b 

그것이 똑같은 것을 믿음으로

a, b = b, a+b 

를 교체 tryed하지만 출력 Shouldn 다른 (잘못된)임을 주목 이 두 코드는 없어요. 똑같은 일을합니까?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

def main(args): 
    fibonacci(1000) 
    return 0 

def fibonacci(n): 
    a, b = 0, 1 
    while b < n: 
     print b, 
     a, b = b, a+b # if I comment this and decomment the two line below it shows me a different output 
     # a = b 
     # b = a + b 

if __name__ == '__main__': 
    import sys 
    sys.exit(main(sys.argv)) 
+2

, b' '의 새로운 값에 대한 계산은'A'의 이전 값으로 수행된다. 새로운 것과 함께 두 번째. –

+0

파이썬 튜토리얼 그 자체 [프로그래밍을위한 첫 단계] (https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming) –

+0

관련 내용 : http : // stackoverflow.com/questions/40405818/why-doesn-t-executing-axxa-twice-result-in-a-change-of-values –

답변

3

당신이 할 때

a, b = b, a+b 

a은 b의 이전 값을 보유하고 b은 이전 값을 기준으로 a+b을 유지하십시오.

그러나 당신이 할 때 a

a = b 
b = a + b 

값은 a=b 동안 b에 업데이트되며, a 이제 업데이트 될 따라서 a+b는 다른 결과가있을 것이다.

예를 들어 두 값을 교환하는 간단한 코드를 참조하십시오. 이 때문에 값의 비행 변화에의 할 수있다 : 처음에

>>> a , b = 5, 10 
>>> a, b = b, a 
>>> a, b 
(10, 5) 
2

b, a+b(b, a+b) (튜플)와 동일하다 : 여기 전체 코드이다. a, b = b, a+b을 할 때 첫 번째 요소를 왼쪽 변수에 할당하고 두 번째 값을 오른쪽 변수에 할당합니다. 교체에

, 당신은 전에 일어나지 않았다 b을 계산 전에 a의 값 을 변경했습니다. 우리가 a = 1b = 2를 가정하면

그래서, 우리가 가지고 : 당신의 후자의 예에서

a, b = (2, 1+2) 
>> print(a) 
>> 2 
>> print(b) 
>> 3 

을, 우리는이 것 :

a = 2 
b = 2 + 2 
>> print(a) 
>> 2 
>> print(b) 
>> 4