首页 > 解决方案 > and&or 在 print() 函数中如何工作?

问题描述

在搜索时看到了这个,我无法理解背后的逻辑。和 & 或方法在 print() 中是如何工作的?

T=[int(s) for s in input().split()]
print(T and sorted(sorted(T,reverse=True),key=abs)[0] or 0)

我尝试简化它以了解它如何处理不同的输入。

print(A and B or C)

当 B 不为 0 时返回 B,当 B 为 0 但永远不会到达 A 时返回 C。

标签: python

解决方案


这是使用三元条件运算符的旧式方式。

它与 没有任何关系print

看到这个答案

在大多数情况下,它的作用与此代码相同

print(T and sorted(sorted(T,reverse=True),key=abs)[0] or 0)
print(sorted(sorted(T,reverse=True),key=abs)[0] if T else 0)

它之所以起作用,是因为它在 Pythonandor起作用——它们不返回bool,但它们返回第一个或第二个操作数,具体取决于它是强制转换为 True 还是 False。

这个答案有更多细节。

基本上是两个操作

first = T and sorted(sorted(T,reverse=True),key=abs)[0]

and如果有,则返回第一个 Falsy 值,否则返回表达式中的最后一个值。

所以它要么返回[](T 的可能 Falsy 值),要么返回排序列表中的第一个元素。

result = first or 0

or如果有,则返回第一个 Truthy 值,否则返回表达式中的最后一个值。

所以如果T是Truthy,我们已经有一个Truthy值(除非它是0,这是first特殊情况,但无论如何),它将被返回。0 or 00

如果T[]- 它将返回 0。


推荐阅读