教育用 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 独自の実装が原因です。
他の言語では、最後の行はその上の 2 行と同じ効果がありますが、Python はElement(element, None)
最初に式を評価し、次に結果を左から右に割り当てるため、 のself.tail
前に割り当てられself.tail.next
ます。これにより、前の末尾要素が新しい末尾要素を参照せず、新しい末尾要素がそれ自体を参照することになります。
私の質問は、これら 2 つの割り当てを 1 つのステートメントで実行する方法はありますか?
私は、より明示的な 2 行の割り当てを使用することに完全に満足しています。これは単なる好奇心のためです。