提问人:Silence 提问时间:7/29/2021 更新时间:7/29/2021 访问量:96
Python 多重赋值似乎不会一次发生
python multiple assignment doesn't seem to occur at once
问:
class ListNode:
def __init__(self,val,next=None) -> None:
self.val=val
self.next=next
n3=ListNode(3,n4)
n2=ListNode(2,n3)
n1=ListNode(1,n2)
n2,n2.next,n1=n2.next,n1,n2
如果同时发生,则 n2.next 应为 n1,但结果显示 n2.next=n3。这是否意味着在应用 n2=n2.next 后执行 n2.next=n1?我做错了什么?
答:
2赞
Tasbiha
7/29/2021
#1
在 python 赋值语句中,始终在将值赋值到左侧之前计算右侧。计算右侧每个变量的结果,即 n2.next,n1,n2,使得 n2.next 为 3,n1 为 1,n2 为 2。然后,分配从左到右进行。
首先将 N2.next 分配给 N2,然后将 N1 分配给 N2.next,然后将 N2 分配给 N1。所以你是对的,它是按顺序进行的,而不是同时进行的。
0赞
Ram
7/29/2021
#2
Python 从左到右计算表达式。请注意,在评估作业时,右侧在左侧之前进行评估。 文档
分配按如下方式进行:
初始值:
n3 = ListNode(3,n4)
n2 = ListNode(2,n3)
n1 = ListNode(1,n2)
n2, n2.next, n1 = n2.next, n1, n2
右侧评价:
A. n2.next = n3 = (3, n4)
B. n1 = (1, n2)
C. n2 = (2, n3)
从左到右分配
1. Now n2 is n2.next which is n3. So n2 = (3, n4) {From A}
2. n2.next is n1 i.e, n2.next = n1. So n2 = (3, n1) {From B}
3. n1 is n2. So n1 = (2, n3) {From C}
所以最终值是:
n1 = (2, n3)
n2 = (3, n1)
评论