关于Python中(a,b)=(b,a)=(1,2)
>>> (a,b)=(b,a)=(1,2)
>>> (a,b)
(2, 1)
>>> (a,b) == (1,2)
False
>>>
不是规定了(a,b)=(b,a)=(1,2)
为什么最终 (a,b) == (1,2)是假
而且
>>> a
2
>>> b
1
>>> 既然都说了a=2 那(a,b) == (1,2)咋能成立呢 >>> (a,b)=(b,a)=(1,2) 这句代码 我解析就是:
给a,b赋初值1,2同时完成交换 wp231957 发表于 2022-2-13 16:38
>>> (a,b)=(b,a)=(1,2) 这句代码 我解析就是:
给a,b赋初值1,2同时完成交换
有没有一种可能
程序从左至右
先满足(a,b)=(1,2) -> a=1, b=2
再满足(b,a)=(1,2)-> a=2, b= 1 ten$1 发表于 2022-2-13 16:42
有没有一种可能
程序从左至右
先满足(a,b)=(1,2) -> a=1, b=2
就是这两个语句的简写(或称复合语句)
>>> a,b=b,a=1,2
>>> a
2
>>> b
1
>>> a,b=1,2
>>> a,b=b,a
>>> a
2
>>> b
1
>>> a, b = b, a = 1, 2
拆分成:
a, b = b, a # 无意义,因为还没有定义
b, a = 1, 2
结果:
a = 2
b = 1 本帖最后由 isdkz 于 2022-2-13 16:50 编辑
像这种连续赋值都是从左到右依次赋最右边的那个值,你拿列表来试一下就知道了
>>> a = a = # 赋值顺序是先 a = 然后再 a = ,因为此时a已经定义了了,所以不会报错
>>> a
>>> b = b = # 赋值顺序是先 b = 然后再 b = ,因为先执行b = ,此时b还没有定义,所以报错了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> 看我这理解可不可以,
>>> (a,b)=(b,a)=(1,2) #这里的‘=’意思是,ab的值互换,然后令b=1, a=2
>>> (a,b)
(2, 1)
>>> (a,b) == (1,2) #那这个判断当然false了
False
>>>
darrenkwan 发表于 2022-2-13 16:49
看我这理解可不可以,
==运算的结果是什么,你看它们的值就好,不用想这么复杂,
(a, b) 的值都是(2,1)了
(2,1)能跟(1,2)相等吗?元组是有顺序的,那肯定不等了,所以就False了
至于赋值顺序你看我上面说的 ten$1 发表于 2022-2-13 16:42
有没有一种可能
程序从左至右
先满足(a,b)=(1,2) -> a=1, b=2
虽说 Python 比较不讲究左右值,但如 C 语言:
一般程序语言涉及左值(lvalue)和右值(rvalue)
1, 2 是字面常量(右值),a, b 是变量(左值)
不能一行代码就解决赋值再交换,除非直接赋值,如:
a = 1
b = 2
a, b = b, a
可以写成 b, a = 1, 2 # 直接赋值
结果:
a = 2
b = 1
页:
[1]