python - 这个交换类型表达式是如何工作的?
问题描述
我一直在尝试使用python。我找到了变量的交换方法:
var1, var2 = var2, var3
我想用相同的方法来比较(==
),但输出并不令人满意。
>>> foo = 2
>>> bar = 3
>>> foo, bar == bar, foo
(2, True, 2)
>>>
我以为它会简单地给出False
。原因:
foo 不等于 bar 并且 bar 不等于 foo
我又做了一些测试:
>>> foo = 2
>>> bar = 3
>>> foobar = 4
>>> foo, bar, foobar == foobar, foo, bar
(2, 3, True, 2, 3)
>>>
结果仍然是一样的,我希望它会给出False
. 原因:
这是如何工作的?
解决方案
它与运算符优先级有关,就像
2 + 3 * 4 == 14
因为它与(因为*
优先级高于+
)相同
2 + (3 * 4)
表达方式
var1, var2 = var2, var3
与(因为逗号运算符的优先级高于赋值运算符)相同:
(var1, var2) = (var2, var3)
和
var1, var2 == var2, var3
与(因为==
运算符的优先级高于逗号运算符)相同
var1, (var2 == var2), var3
手册的相关部分:https ://docs.python.org/3/reference/expressions.html#evaluation-order
期望的结果,即产生的表达式
(a==c), (b==d)
从
a, b ... c, d
在一般情况下稍微复杂一些。您当然可以只写(a==c), (b==d)
or a==c, b==d
,但@AdamSmith 的建议适用于任意数量的参数(并且您不需要提取元组元素):
all(x==y for x,y in zip([a, b], [c, d]))
推荐阅读
- numpy - 从 top_k 函数返回到图像
- mysql - Mysql 两个动作之间时间差的总和
- tfs - VSTS [SONAR] - 错误:无法对不在映射的 TFS 工作区中的以下文件进行 TFS 注释
- c++ - 指定复制构造函数不用作复制构造函数
- c - 将字符串存储在另一个字符串的指针数组中
- coldfusion - 如何在 Coldfusion 11 中设置和检查会话?
- wordpress - 我可以使用 Wordpress API 从其他网站推送和拉取数据吗?
- java - 通过带有参数表的注释选择 CDI bean
- javascript - 绑定数组的对象数组
- android - CardViews 未显示在 RecyclerView 中