2013-02-13 24 views
0

我看到了Python的這種用法,它非常乾淨,但我不太瞭解這種用法​​,也無法搜索任何有用的解釋。這是什麼:使用backet來實現Python中的if語句?

  1. 這是正常的方法:

    if a < 0: 
        b = 2 * a 
    else: 
        b = 3 * a 
    
  2. 這實現同樣的目的:

    b = a * (3,2) [a<0] 
    

有人能告訴我哪裏的官方文檔說些什麼關於上述?

回答

3

b = a * (3,2) [a<0]

a<0是返回true or false1/0

(3,2)3元組和2作爲元素

條件3210

如果條件true聲明將在指數1其他被索引的元素,它將索引,以元素0

In [33]: (3,2)[0] 
Out[33]: 3 

In [34]: (3,2)[1] 
Out[34]: 2 

0條件的結果或1因爲在蟒蛇True means 1False means 0

In [35]: True == 1 
Out[35]: True 

In [36]: False == 0 
Out[36]: True 
+0

可以給這個官方文檔的地址嗎?TKS你的回答 – smilejustforfan 2013-02-13 12:47:25

+0

我懷疑是否有官方文檔關於這一點,這是所有關於組合你所知道的「元組」和「條件」語句,這不是標準的方法做到這一點,但這是其中一種方式,即使在某個地方會有文檔,它也只會引用標準方法「if-else」 – avasal 2013-02-14 03:51:47

2

請僅將第二個選項用於打高爾夫球。該文檔實際上並沒有多說這個語法,但The Zen of Python確實表明'簡單比複雜'更好,並且'可讀性計數'。你應該使用第一個選項。

你也可以使用Python的三元操作

b = a*(2 if a < 0 else 3) 
+1

高爾夫將更像'b = a *(3-(a <0))' – 2013-02-13 10:10:10