Python 条件表达式/三元运算符

Python 条件表达式/三元运算符,python,ternary-operator,conditional-operator,Python,Ternary Operator,Conditional Operator,我不懂这个语法 Python程序演示三元运算符 使用元组选择项目 链接到资源: a首先请注意,所有这些都给出了a和b的最小值: a, b = 10, 20 res1 = (b, a)[a < b] # 10 res2 = {True: a, False: b}[a < b] # 10 res3 = (lambda: b, lambda: a)[a < b]() # 10 你的误解可能是关于a

我不懂这个语法

Python程序演示三元运算符

使用元组选择项目

链接到资源:
a首先请注意,所有这些都给出了
a
b
最小值:

a, b = 10, 20

res1 = (b, a)[a < b]                    # 10
res2 = {True: a, False: b}[a < b]       # 10
res3 = (lambda: b, lambda: a)[a < b]()  # 10

你的误解可能是关于a 在所有这些情况下,计算a

print( (b, a) [a < b] )
print({True: a, False: b} [a < b])
print((b,a)[a

print((lambda:b,lambda:a)[a
对象是一个元组,包含变量本身或返回这些变量的非常简单的匿名函数

print( (b, a) [a < b] )
print({True: a, False: b} [a < b])
print({True:a,False:b}[a
表达式被求值并用作字典的键,字典的键既有True,也有False。假设这意味着它必须是较旧的Python版本是不正确的,因为字典并不表示值的重新分配,而只是一个数据结构,其中键映射到一个值。True和False是有效的密钥,而这种情况正是此处使用的内容

最后:

 print( a if a < b else b )
打印(如果a

是一个很好的简洁的表达相同事物的方法,事实上,我在本例中使用的代码行

True
False
没有赋值;它们只是被用作
dict
的键。这是真的。我还没有意识到这只是一个键而不是赋值。如果[expression]else[on\u false]
,这些是替代语法而不是
[on\u true]。他们使用的事实是,
foo={1:“one”}
print(foo[1])
可以直接写为
print({1:“one”}[1])
关于lambdas更有效的评论也是可疑的。构造两个
函数
对象并随后调用其中一个对象可能比简单地计算
a
b
要昂贵得多(计算
a
,所以整个构造有点低效)。你是什么意思“三元运算符在编译时应用”?它是在运行时计算的实条件运算符(例如,与C预处理器#ifdef不同).@alexis,Python文件从技术上讲是有关联的。字节码然后用CPython解释。如果我理解你的意思,你是对的,没有对机器代码的编译。不,那会让人毛骨悚然。我的意思是更相关的:编译时条件选择分支基于程序读取/预处理/co时的真实情况mpiled。例如,
#如果OS==“darwin”
,那么将始终遵循相同的分支——实际上,条件不再存在。但是Python三元数是一个真实的if,并且将在每次程序流命中它时重新计算(有时为真,有时为假)。
>>> True == 1
True
>>> False == 0
True
>>> isinstance(True, int)
True
>>> ('a', 'b')[True]  # True == 1
'b'
>>> ('a', 'b')[1<2]  # 1<2 == True == 1
'b'
>>> ('a', 'b')[2<1]  # 2<1 == False == 0
'a'
>>> {True: 'a', False: 'b'}[1<2]  # 1<2 == True
'a'
a, b = 10, 20

res1 = (b, a)[a < b]                    # 10
res2 = {True: a, False: b}[a < b]       # 10
res3 = (lambda: b, lambda: a)[a < b]()  # 10
res4 = a if a < b else b
print( (b, a) [a < b] )
print((lambda: b, lambda: a)[a < b]())
print({True: a, False: b} [a < b])
 print( a if a < b else b )