2017-01-04 5 views
-1

저는 파이썬 스크립트를 테스트 중이며, 여기서는 2 개의 변수의 이전 값을 지속적으로 저장 한 다음 함수를 통해 반환해야합니다. 이것을 위해 나는 fibonacci 시리즈를 예로 들었다 :Python의 동적 변수 할당

def fibonacci(n): 
    a=0;b=1;cnt=0; 
    while True: 
    if (cnt > n): 
     return; 
    yield a; 
    c=b;b=a+b;a=c; 
    cnt +=1; 

fib=fibonacci(5) 
for x in fib: 
    print(x,end=" ") 

모든 것이 여기에 예상대로 완벽하게 작동하며 예상대로 출력된다. 그러나 나는 다른 방법으로 그것을 쓰려고 시도했다. 대신에 여분의 변수 "c"를 사용하는 대신 효율적으로 오래된 값의 교환을 할 수 있었고, 사실상 여기에 부딪혔다.) 대신 라인의

: 사용

c=b;b=a+b;a=c; 

: 그래서 자세한 설명이 이해 될 것이다

a,b=b,a+b 

합니다.

+1

'c = b; b = a + b; a = c;'한 줄에 명령을 넣지 마십시오. 사람들에게 코드를 읽을 수 없게 만듭니다. – furas

+1

이것은 파이썬이 [unpacking] (https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch01s01.html)을 지원하기 때문에 가능합니다. –

+1

쉼표',''tuple'을 만드는 데 사용됩니다 - 그래서 여러분은 값을 튜플'b, a + b'에 "팩"하고 나중에이 튜플을 변수'a, b'에 "풀어" – furas

답변

2

이것은 Python의 기능입니다.

>> a=1 
>> b=2 
>> a, b = b, a 
>> a, b 
>> (2, 1) 

할당의 오른쪽은 새 튜플을 만드는 표현식입니다. 할당의 다른 쪽은 즉시 (참조되지 않은) 튜플을 이름 a와 b에 압축을 풉니 다.

할당 후에 새 튜플이 참조되지 않고 가비지 수집으로 표시되고 a 및 b에 바인딩 된 값이 바뀌 었습니다.

확인이 도움이 tuple and sequences

희망.