提问人:ihadanny 提问时间:3/29/2020 最后编辑:ihadanny 更新时间:3/31/2020 访问量:209
反转具有多个赋值的链表 - 并非所有赋值顺序都有效?
reverse a linked list with multiple assignment - not all assignment orders work?
问:
与在多个赋值中反转 LinkedList 完全相同
但如果你尝试:
pre, node, node.next = node, node.next, pre
这是行不通的!(获取没有属性)NoneType
双:
pre, node.next, node = node, pre, node.next
和
node.next, pre, node = pre, node, node.next
工作。为什么顶部是错的?我以为多重作业使我无需考虑正确的顺序(或根本不考虑:)
编辑:
我将缩小范围:
if node:
node.next, node = None, node.next
#node, node.next = node.next, None # comment the previous line and uncomment this - boom!
我一直以为这些台词是等价的......
答:
3赞
Alain T.
3/31/2020
#1
问题在于,其中一个接收变量执行基于所分配值的间接操作。多重赋值逻辑使您不必考虑右侧,因为它会自动为源值创建临时存储。但是,这不适用于作业的左侧。
因此,分配的顺序很重要,因为分配到 。node
node.next
评论
0赞
ihadanny
3/31/2020
所以它使我免于用右脑思考,而不是用左脑思考?:)
0赞
Davis Herring
4/3/2020
有趣的是,即使该语言没有像 C 语言那样指向变量的指针,这也可以工作。每个赋值都可以预先计算为一种规范形式,或带有 and(视情况而定)或保存,就像右侧的值一样。不过,在重要的情况下,这可能更令人惊讶......x
x.a
x[k]
x
a
k
0赞
Alain T.
4/3/2020
我想这是一个设计决定。在某些用例中,不预先确定目标收件人可能是预期/要求的。在任何情况下,了解它的行为方式是获得所需结果的关键(例如,使用二传手分配属性)。
评论