为了更好地解释,我编写了一个小类node
,并设置了a
和b
:
class node(object):
def __init__(self,x,y):
self.val = x
self.next = y
a = node(5,6)
b = None
然后我发现结果不同于:
a, a.next, b = a.next, b, a
print(a,b) #it returns AttributeError: 'int' object has no attribute 'next'
以及:
a.next, a, b = b, a.next, a
print(a,b) #it returns 6 <__main__.node object at 0x1021a0400>
我们都知道,当a, b = b, a+b
时,它同时给出a,b值,当代码变成b, a = a+b, b
时,结果不变。你知道吗
有人能帮我吗?为什么会这样?你知道吗
拆包不是同时进行的。只是右手边在“拆包”到左手边之前是“构造”好的。但是每一边都是从左到右的!你知道吗
所以发生的事情大致是这样的(它实际上并不构建元组,但这只是一个实现细节):
在第二种情况下,它起作用是因为在“重新分配”
a.next
之后是“重新分配”:只有当LHS元素是独立的时,元组解包才会“同时”。既然您已经创建了一个它们不是独立的情况,那么实现中的小细节现在就很重要了。你知道吗
在这种情况下,重要的细节是LHS元素是从左到右分配的。由于在查看
a.next
时a
包含int
,因此会引发异常。你知道吗。。。你知道吗
相关问题 更多 >
编程相关推荐