我在一个竞争激烈的编程网站上,发现一个人写了这个奇怪的(对我来说)Python 3代码:
[r,"Nothing"][r==""]
如果'Nothing'
是空字符串,则输出r
。
这怎么称呼它是什么意思?它看起来像一个三元运算符。
答案 0 :(得分:5)
这怎么称呼它是什么意思?它看起来像一个三元运算符。
Python AFAIK中没有正式名称;实际上,这只是一种偷偷摸摸,错综复杂的索引列表方式。
如果"Nothing"
为r==""
,您将选择True
;如果r
为r == ''
,则会选择False
;举个例子:
>>> [0, 1][True]
1
>>> [0, 1][False]
0
因为True
和False
分别被解释为1
和0
,所以当您为列表编制索引时。
提供的代码段只定义了一个包含两个元素[r, "Nothing"]
的临时列表,然后使用True/False
与空字符串r
进行比较的[r=='']
结果对其进行索引。
不是最易读的代码,可能不是创建您不打算使用的列表的最佳主意;它可以很容易地用条件表达式代替:
"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
无需创建列表,也无需下标;只是条件和一些加载。
答案 1 :(得分:1)
它转换为:
if (r==""):
'Nothing'
else:
r
此上下文中的 False
用作0,True
用作1:
>>> [r,'Nothing'][False]
'foo'
>>> [r,'Nothing'][True]
'Nothing'
在其他语言中,它与'condition'?'if true':'if false'
类似。它通常用在code golf中,你必须尽可能地生成最短的代码。