2015-04-04 159 views
0

因此,在JavaScript(以及其他語言)中,您可以使用以下參數指定默認值: -
a = b || c - 這主要用於函數內部,但可以在一個函數之外使用。如果bundefineda = ca = b || c在Python中

我正在尋找類似的方法在python中。我有一個列表s,最多包含3個數字。它有時是1或2。我想要做的蟒蛇相當於下面如果有可能的:因爲我不熟悉的東西,這是所謂的

a = s[0] || 0 
b = s[1] || 9 
c = s[2] || 1 

,我不能做太多的搜索,但我試過並沒有取得任何結果。

我該怎麼做?

+1

同樣的方法。使用['或'](https://docs.python.org/2/reference/expressions.html#or)運算符。 – thefourtheye 2015-04-04 12:42:45

+0

相關:http:// stackoverflow。com/q/28308648/2301450 – vaultah 2015-04-04 12:43:08

+0

@thefourtheye我不知道有一個'或'操作符,但嘗試這樣做後,我得到'列表索引超出範圍'的錯誤。 – Spedwards 2015-04-04 12:44:27

回答

2

在許多語言中,某些值評估爲False。在Python中,這是False,None,0,0.0,[],(),{},''和每個對象,其具有評估爲False的特殊方法。

在您的描述中,你只想填寫一個列表最多3個元素。

a, b, c = s + [0,9,1][len(s):] 
+0

好吧不是那麼聰明。我會亂搞這個,看看我能不能打破它,但我不認爲我會。謝謝! – Spedwards 2015-04-04 13:26:59

+0

沒有這個牢不可破的偉大。假設列表項不存在,並且不是全部設置爲「無」 – jamylak 2015-04-04 15:30:02

0

我不認爲這在Python中特別優雅 - 您需要考慮當列表太短並且需要區分無(通常用於指示「不存在」)和0(其中也評估爲False)。

你可以使用

a = s[0] if (len(s)>0 and s[0] is not None) else 0 

這是不是一個真正的優雅地道的一行雖然,你要記得寫的s三次索引。

或者

# defined once 
def get_default(s,idx,default): 
    return s[idx] if (len(s)>idx and s[idx] is not None) else default 

a = get_default(s,0,0) 
b = get_default(s,1,9) 
... 

可能,如果你打算這是做了很多,始終使用列表做。我認爲這可能只是一種情況,即使用Javascript在Python中不起作用,但你必須忍受這一點。

0

試試這個關於你的第line.But s應該是defined

s[0] if (s and s[0]) else 0 
0

在你的代碼的替代品將被選擇,如果列表中的每個太短,或者:這是可以做到的其中的值是錯誤的或未定義的。這種模棱兩可的情緒在Python中受到阻礙,一段時間後人們會學習欣賞。例如,你可以寫:

a = s[0] or 0      # fall back to 0 if s[0] is False 
a = s[0] if s[0] is not None else 0 # fall back to 0 if s[0] is None 
a = s[0] if s else 0     # fall back to 0 if s is empty 

它是由你來決定你的意思是哪一個,而且希望所有的人都在一次它是相當罕見的。如果你這樣做,寫一個表達適當邏輯的函數,並從你的表達式中調用它。

相關問題