这个交换类型表达式是如何工作的?
How is this swap type expression working?
我一直在试验 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)
甚至 a==c, b==d
,但是@AdamSmith 的建议适用于任意数量的参数(并且您不需要提取元组元素):
all(x==y for x,y in zip([a, b], [c, d]))
我一直在试验 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)
甚至 a==c, b==d
,但是@AdamSmith 的建议适用于任意数量的参数(并且您不需要提取元组元素):
all(x==y for x,y in zip([a, b], [c, d]))