2011-10-24 23 views
52

我有以下代碼一個行,如果輸入條件分配

num1 = 10 
someBoolValue = True 

我需要的num1值設置爲20如果someBoolValueTrue;別的什麼也別做。所以,這是我爲

num1 = 20 if someBoolValue else num1 

代碼有什麼方法我可以避開...else num1部分,使它看起來更乾淨?一個相當於

if someBoolValue: 
    num1 = 20 

我試着用...else pass這樣的替換它:num1=20 if someBoolValue else pass。我得到的只是語法錯誤。我也不能忽略...else num1部分。

感謝

+1

只要改變這一切'NUM1 = 20,如果someBoolValue其他10'。那麼你還保存'num1 = 10'行? –

+0

謝謝。但這不完全是我的代碼。我的意思是'num1'已經存在... – bdhar

回答

87

我不認爲這是可能在Python,因爲你實際上是什麼試圖做可能被擴大到這樣的事情:

num1 = 20 if someBoolValue else num1 

如果排除else num1,你會因爲我敢肯定的是,轉讓必須實際換貨政收到一個語法錯誤某事。

正如其他人已經提到的,你可以這樣做,而是因爲你很可能會剛剛結束,下一次讀取的代碼混淆時,自己很糟糕:

if someBoolValue: num1=20 

我不是出於完全相同的原因,num1 = someBoolValue and 20 or num1的大粉絲。我必須實際考慮那些線路正在做的事情。

真正實現你想要做什麼,最好的辦法是原始版本:

if someBoolValue: 
    num1 = 20 

這是最好的verison的原因是因爲它是非常明顯的,你想要做什麼,你就不會混淆你自己,或者其他任何人稍後將與該代碼聯繫。

另外,作爲附註,num1 = 20 if someBoolValue是有效的Ruby代碼,因爲Ruby的工作方式有點不同。

+2

感謝馬丁的解釋! – bdhar

+1

根據PEP-308(https://docs.python.org/2.5/whatsnew/pep-308.html),如果放在paren中,條件表達式可以變得更清晰,如在'num1 =(20 someFoolValue else num1 )'。 – haridsv

13

在一個行:

if someBoolValue: num1 = 20 

但不這樣做。這種風格通常不是預期的。爲了清晰和一致,人們更喜歡更長的形式。

if someBoolValue: 
    num1 = 20 

(同樣,駱駝帽應儘量避免。所以,與其用some_bool_value。)

需要注意的是直列表達some_value if predicate沒有else部分不存在,因爲不會有回報如果謂詞是錯誤的,則返回值。但是,表達式在所有情況下都必須具有明確定義的返回值。這與Ruby或Perl中的用法不同。

+0

爲什麼我不應該那樣做? – bdhar

+2

補充說明。 – Debilski

+2

因爲它很難閱讀,你可能最終會被自己的代碼弄糊塗,這絕不是一個好主意。 – Frost

3

不,我猜你希望像num1 = 20 if someBoolValue這樣的東西可以工作,但事實並非如此。我認爲最好的方法是使用if聲明,你寫它:

if someBoolValue: 
    num1 = 20 
24

使用此:

num1 = 20 if someBoolValue else num1 
+1

這是我一直在使用..並尋找替代..謝謝反正! – bdhar

0
num1 = 20 * someBoolValue or num1 
6

您可以使用下列之一:

(falseVal, trueVal)[TEST] 

TEST and trueVal or falseVal 
+0

不錯的一個班輪條件分配 – minhas23

3
num1 = 10 + 10*(someBoolValue == True) 

這是我的新的最終答案。 以前的答案如下,對於所述問題是過度的。 Getting_too_clever == not Good

num1 = 10 + (0,10)[someBoolValue == True] 

你提到num1就已經有應單獨留在家中的值:如果你想補充一點的True COND,另一個用於False這裏的答案之前...還是不錯的。我假設爲num1 = 10,因爲這是該帖子的第一條語句,因此要獲得20的操作是添加10

num1 = 10 
someBoolValue = True 

num1 = 10 + (0,10)[someBoolValue == True] 

print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}') 

產生這種輸出

num1 = 20 
someBoolValue = True 
+0

現在我想我應該回答 'num1 = 10 + 10 *(someBoolValue == True)' 問題定義爲'假'條件基本上作爲無操作。如果需要爲'False'添加不同的值,那麼先前的答案更合適。我是否可以編輯我的文章或在評論中做這件事? – MikeyB

相關問題