python - 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。
解决方案
这是使用三元条件运算符的旧式方式。
它与 没有任何关系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)
它之所以起作用,是因为它在 Pythonand
中or
起作用——它们不返回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 0
0
如果T
是[]
- 它将返回 0。
推荐阅读
- tensorflow - TensorFlow 构建失败
- c# - iOS“更多”选项卡记住上次打开的页面问题(xamarin)
- android - 如何通过 FCM 发送 Firestore 时间戳?
- javascript - 使用多个动态图表时Highchart闪烁
- firebase - 在这种情况下,我可以取消关联 Firebase 用户帐户吗?
- sql - SSMS - 寻求帮助编写选择语句以返回 SQL 中的重复项 [包含示例]
- flutter - 如何在展开的 ListView 中设置容器宽度
- python - 小写分隔符 Python 后的第一个字母
- javascript - Vue.js - 使用无效数据调用的函数 DocumentReference.set()。不支持的字段值:未定义
- sql-server - 向 SSIS 包添加简单的脚本任务会显着降低性能吗?