2013-03-19 2 views
3

Любые предложения о том, как это сделать в Python?Pythonic способ условно назначать переменные

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

я могу поменять их, как показано ниже, но это не так очевидно (и не очень вещий ИМО)

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

переброса значения с a, b = b, a считается idiomatic in Python.

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

Одна хорошая вещь об этом, вам не повторить 10 и 20, так что это немного DRY-er.

+0

Вы повторяете * присваивание *, хотя, так что это немного стирка. – chepner