我是一個有競爭力的節目現場,發現是誰寫的這個奇怪的(對我來說)一個人的Python 3代碼:兩個方括號並排:奇效
[r,"Nothing"][r==""]
它輸出'Nothing'
,如果r
是空的字符串。
這是怎麼回事,這是什麼意思?它看起來像一個三元操作符。
我是一個有競爭力的節目現場,發現是誰寫的這個奇怪的(對我來說)一個人的Python 3代碼:兩個方括號並排:奇效
[r,"Nothing"][r==""]
它輸出'Nothing'
,如果r
是空的字符串。
這是怎麼回事,這是什麼意思?它看起來像一個三元操作符。
這是怎麼回事,這是什麼意思?它看起來像一個三元操作符。
在Python AFAIK中沒有它的正式名稱;這真是一種索引列表的詭,,令人費解的方式。
你會選擇"Nothing"
如果r==""
是True
和r
如果r == ''
是False
;作爲一個例子:
>>> [0, 1][True]
1
>>> [0, 1][False]
0
因爲True
和False
分別解釋爲1
和0
,當你的索引列表。
只是提供的片段定義了與所述兩個元件[r, "Nothing"]
,然後使用的r
與空字符串[r=='']
比較的結果True/False
索引它的臨時列表。
不是最易讀的代碼,可能不是創建不打算使用的列表的最佳方法;
"Nothing" if r == "" else r
更可讀的和大量的更有效的:它可以由條件表達式可以容易地取代
%timeit True if False else False
10000000 loops, best of 3: 32.9 ns per loop
%timeit [False, True][False]
10000000 loops, best of 3: 176 ns per loop
無需創建列表,並且不需要下標它;只是一個條件和一些加載。
它轉換爲:
if (r==""):
'Nothing'
else:
r
False
在此上下文中被用作0,True
爲1:
>>> [r,'Nothing'][False]
'foo'
>>> [r,'Nothing'][True]
'Nothing'
這是一個一行在其他語言類似於'condition'?'if true':'if false'
。它通常用於code golf,您必須儘可能地生成最短的代碼。
ooooh是的沒錯!這很棘手!非常感謝你! –