首页 / PYTHON / Python实现赋值链的问题
Python实现赋值链的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python实现赋值链的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1876字,纯文字阅读大概需要3分钟。
内容图文
我正在为教育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)
我的问题来自最后一行.根据the top answer to this question,Python对链式赋值的独特实现是罪魁祸首.
在其他语言中,最后一行与它上面的两行具有相同的效果,但是Python首先计算表达式Element(element,None),然后从左到右分配结果,因此在之前分配self.tail self.tail.next.这导致前一个tail元素没有引用新的tail元素,而新的tail元素引用自身.
我的问题是:有没有办法用一个语句执行这两个任务?
我完全满足于使用更明确的两行分配;这只是为了好奇心.
解决方法:
作业永远不会被束缚.
赋值首先评估右手表达式,然后从左到右逐个将结果分配给左手目标.
见assigment statement documentation:
An assignment statement evaluates the expression list (remember that this can be a single expression or a comma-separated list, the latter yielding a tuple) and assigns the single resulting object to each of the target lists, from left to right.
所以你的代码:
self.tail = self.tail.next = Element(element, None)
有效意味着:
result = Element(element, None)
self.tail = result
self.tail.next = result
您可以使用此方法,只需撤消分配顺序:
self.tail.next = self.tail = Element(element, None)
分配正确的顺序:
result = Element(element, None)
self.tail.next = result
self.tail = result
这会导致链接列表的正确行为:
>>> head = tail = Element(0, None)
>>> tail.next = tail = Element(1, None)
>>> head.value
0
>>> head.next
<__main__.Element object at 0x10262e510>
>>> head.next.value
1
>>> tail is head.next
True
>>> tail.next = tail = Element(2, None)
>>> tail is head.next.next
True
内容总结
以上是互联网集市为您收集整理的Python实现赋值链的问题全部内容,希望文章能够帮你解决Python实现赋值链的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。