我正在为一个教育 Python 库编写一个链表。以下是重要的代码片段:
class Element(object):
def __init__(self, value, next):
self.value = value
self.next = next
class LinkedList(object):
def __init__(self):
self.head = None
self.tail = None
def insert_back(self, element):
if self.empty():
self.insert_front(element)
else:
self.tail.next = Element(element, None)
self.tail = self.tail.next
# I'd like to replace the above two lines with this
# self.tail = self.tail.next = Element(element, None)
我的问题来自最后一行。根据这个问题的最高答案,Python独特的链式赋值实现是罪魁祸首。
在其他语言中,最后一行与它上面的两行具有相同的效果,但 PythonElement(element, None)
先计算表达式,然后从左到右分配结果,因此self.tail
在之前赋值self.tail.next
。这导致前一个尾元素不引用新的尾元素,而新的尾元素引用自身。
我的问题是:有没有办法用一条语句来执行这两个任务?
我完全满足于使用更明确的两行赋值;这只是出于好奇。