我正在为教育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)
Run Code Online (Sandbox Code Playgroud)
我的问题来自最后一行.根据这个问题的最佳答案,Python对链式赋值的独特实现是罪魁祸首.
在其他语言中,最后一行与其上面的两行具有相同的效果,但Python Element(element, None)首先计算表达式,然后从左到右分配结果,因此self.tail在之前分配self.tail.next.这导致前一个tail元素没有引用新的tail元素,而新的tail元素引用自身.
我的问题是:有没有办法用一个语句执行这两个任务?
我完全满足于使用更明确的两行分配; 这只是为了好奇心.