Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个交换类型表达式是如何工作的?_Python_Variables_Boolean_Swap - Fatal编程技术网

Python 这个交换类型表达式是如何工作的?

Python 这个交换类型表达式是如何工作的?,python,variables,boolean,swap,Python,Variables,Boolean,Swap,我一直在试验python。我找到了变量的交换方法: var1, var2 = var2, var3 我本想用同样的方法进行比较(==),但结果并不令人满意 >>> foo = 2 >>> bar = 3 >>> foo, bar == bar, foo (2, True, 2) >>> 我想它只会给出False。原因: foo不等于bar,bar不等于foo 我做了更多的测试: >>> foo =

我一直在试验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
因为它与相同(因为
*
的优先级高于
+

表情

var1, var2 = var2, var3
与相同(因为逗号运算符的优先级高于赋值运算符):

与相同(因为
=
运算符的优先级高于逗号运算符)

手册的相关部分:

期望的结果,即产生

(a==c), (b==d)

在一般情况下稍微复杂一些。当然,您可以只编写
(a==c)、(b==d)
甚至
a==c,b==d
,但是@AdamSmith的建议适用于任何数量的参数(并且您不需要提取元组元素):


相等的运算符优先级与赋值的运算符优先级不同。赋值执行了一些称为元组解包的神奇操作,使其工作方式与
a,b=b,c
中的工作方式相同。相等没有等价的魔力,因此除了将
a,b==b,c
解析为元组
(a,(b==b),c)
,即使它以您想象的方式解析,并且组绑定更紧密,它也会检查元组
(a,b)
是否等于元组
(b,c)
(除非
a==b==c
是非常错误的)我不确定为什么所有的反对票都是…?这是OP问题的一个非常清楚的解决方案,它有一个MCVE——甚至是图表;-)“一个问题还需要什么?”比约恩说,对这样一个基本系统的根本性误解导致许多人对不够努力的研究投了反对票,但如果我自己没有足够的经验来了解这些模式,我看不到一个简单的方法来了解它是如何工作的。请注意,即使操作符的优先级是正确的,
(a,b)=(c,d)
也不会像OP所希望的那样给出
(a==c)、(b==d)
(而是
(a==c)和(b==d)
)可能值得在zip中包含类似
all(a==b表示a,b表示a,b([foo,bar,foobar],[foobar,foobar])
作为上述内容的替代语法
(var1, var2) = (var2, var3)
var1, var2 == var2, var3
var1, (var2 == var2), var3
(a==c), (b==d)
a, b ... c, d
all(x==y for x,y in zip([a, b], [c, d]))