2012-01-04 42 views
3

有時,我有一個變量,我想默認的東西,如果別的東西設置改變其他東西。Python默認值並根據其他變量設置值。去其他地方或不去。

問題是。什麼是首選?設置默認值,然後在滿足條件的情況下更改它,或者根據初始檢查和添加其他條件,僅設置一次條件?

代碼示例。

if x: 
    y = '%s-other' % x 
else: 
    y = 'some_default' 

另一種選擇是。

y = 'some_default' 
if x: 
    y = '%s-other' % x 

這並不總是在傳遞給函數等等kwargs一種說法是不是我想要依靠這裏。

就個人而言,第二個似乎對我來說更加清晰,但我還沒有找到任何人對此的任何意見。

+0

注意:您可以[格式線爲代碼(HTTP:/ /meta.stackexchange.com/questions/22186/)通過縮進它們四個空格。編輯器工具欄中的「{}」按鈕可以爲您做到這一點。編輯你的問題並嘗試一下。單擊編輯器工具欄中的橙色問號以獲取更多信息和格式化提示。 – outis 2012-01-04 19:38:05

+1

近乎相同的欺騙http://stackoverflow.com/questions/8730946/python-if-then-else-style-when-getting-values-from-dicts – tkone 2012-01-04 19:45:53

+0

這是一個近乎相同的欺騙,但不同,我問兩個他們:)我可以鞏固它在一個。不知道現在我能做到嗎? – ScottZ 2012-01-04 20:18:16

回答

6

如何:

y = '%s-other' % x if x else 'some_default' 
3

正如羅布指出,

y = '%s-other' % x if x else 'some_default' 

是在各種語言中非常常見的結構

Python提供一些更多的選擇和選擇取決於用戶

y = ['some_default','%s-other'][x!=None] 

如果你正在處理的字典,它已經有兩個選項

  1. 使用setdefault像x.setdefault(some_key,some_default)=other
  2. 使用collections.defaultdict

您發佈的其他的也是有效的,但不是很Python的,但還沒有你會遇到很多你的引用風格的代碼。

對我來說,只要一個程序可讀,高效,我們就不應該陷入過度沉迷於某些構建pythonic的焦點。

+0

+1,但在數組索引選項中'bool(x)'可能比'x!= None'更好。 – 2012-01-04 20:05:36

+2

1. Rob的變體比'[if_false,if_true] [cond]'更好。如果你仍然使用它,那麼'None'是Python中的單例,所以它應該是'x不是None'而不是'x!= None'。 2.'y = x.setdefault(some_key,'some_default')',否則它'SyntaxError:不能分配給函數調用'。 – jfs 2012-01-05 00:32:44

0

更多糖其他答案:

y = x and '%s-other' % x or 'some_default' 

但是這一次可以嚇唬人,所以我會建議更換使用Rob的一個:)