Python 两个方括号并排:奇怪的效果
我在一个竞争激烈的编程网站上,发现一个人写了(对我来说)这个奇怪的Python 3代码:Python 两个方括号并排:奇怪的效果,python,python-3.x,Python,Python 3.x,我在一个竞争激烈的编程网站上,发现一个人写了(对我来说)这个奇怪的Python 3代码: [r,"Nothing"][r==""] 如果r为空字符串,则输出'Nothing' 这叫什么名字?它是什么意思?它看起来像一个三元运算符 这叫什么名字?它是什么意思?它看起来像一个三元运算符 在Python AFAIK中没有它的正式名称;实际上,这只是一种为列表编制索引的狡猾、复杂的方法 如果r==“code>为True则选择“无”,如果r==“code>为False,则选择r;例如: >>
[r,"Nothing"][r==""]
如果r
为空字符串,则输出'Nothing'
这叫什么名字?它是什么意思?它看起来像一个三元运算符
这叫什么名字?它是什么意思?它看起来像一个三元运算符
在Python AFAIK中没有它的正式名称;实际上,这只是一种为列表编制索引的狡猾、复杂的方法
如果r==“code>为True
则选择“无”
,如果r==“code>为False
,则选择r
;例如:
>>> [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'
它是一个单行程序,类似于其他语言中的“条件”?“如果为真”:“如果为假”
。它通常用于需要生成尽可能短的代码的地方