2013-03-19 80 views
3

關於如何在Python中做到這一點的任何建議?Pythonic的方式來有條件地分配變量

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

我可以按照以下交換他們,但它不是明確的(也不是很Python的IMO)

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

或者我可以做[a,b] = [20,10] ... [a,b] = [10,20]。不知道它好多了 – Lem0n 2013-03-19 21:22:27

+3

作爲一個方面說明:你不需要(也可能不需要)方括號。您可以像列表一樣輕鬆地交換元組:a,b = b,a'。它更具可讀性,更具慣用性,甚至更快。 – abarnert 2013-03-19 21:25:04

回答

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

請注意,如果您使用元組而不是列表,這可能會更有效,因爲元組是不可變的,他們可以通過解釋器來實現。 – mgilson 2013-03-19 21:24:46

+0

@mgilson:趕上! – 2013-03-19 21:25:09

5

a, b = b, a交換值,可以認爲idiomatic in Python

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

一個好處是關於這就是你不要重複1020,所以這是一個有點DRY-er

+0

雖然你正在重複*任務*,所以這是一個清洗。 – chepner 2013-03-19 22:28:06

相關問題