2013-03-19 4 views
3

파이썬에서 어떻게 할 것인가?조건부로 변수를 할당하는 Pythonic 방법

if x(): 
    a = 20 
    b = 10 
else: 
    a = 10 
    b = 20 

a, b = b, a

a = 10 
b = 20 
if x(): 
    [a, b] = [b, a] 
+0

또는 [a, b] = [20,10] ... [a, b] = [10,20] 할 수 있습니다. 잘 모르겠다. – Lem0n

+3

사이드 노트로 : 대괄호는 필요 없다 (아마도 원하지 않을 수도있다). 튜플은 목록처럼 쉽게 바꿀 수 있습니다 :'a, b = b, a'. 더 읽기 쉽고 관용적이며 더 빨라질 수 있습니다. – abarnert

답변

11
(a,b) = (20,10) if x() else (10,20) 
+3

튜플이 불변하기 때문에 목록 대신 튜플을 사용하면 통역사가 억류 할 수 있으므로이 방법이 더 효율적일 것입니다. – mgilson

+0

@mgilson : 잘 했어! –

5

스와핑 값은 idiomatic in Python 간주됩니다 나는 아래를 교환 할 수 있지만, 명확 (도 IMO 매우 파이썬)이 아니다.

a, b = 10, 20 
if x(): a, b = b, a 

하나 좋은 점은이 약이 1020를 반복하지 않는, 그래서 조금 DRY-er이다.

+0

* 과제 *를 반복하고 있으므로 약간의 씻음입니다. – chepner

관련 문제