Python命名元组列表,替换属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python命名元组列表,替换属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1810字,纯文字阅读大概需要3分钟。
内容图文
这是一些简化的代码,我不明白为什么它不起作用.
from collections import namedtuple
MyStruct = namedtuple('MyStruct', 'ThreadInstance ThreadName Mnemonic IpAddr IpGW Status Mode')
Node = MyStruct(None, '', '', '', '', -1, 0)
NodeDb = []
for id in range(4):
NodeDb.append(Node)
NodeDb[2]._replace(ThreadName='T2')
NodeDb[2]._replace(Mnemonic='ABCD')
NodeDb[2]._replace(IpAddr='192.0.1.2')
NodeDb[2]._replace(IpGW='192.0.1.3')
NodeDb[2]._replace(Status=0)
NodeDb[2]._replace(Mode=2)
print(NodeDb)
这是输出
'>>>
[MyStruct(ThreadInstance=None, ThreadName='', Mnemonic='', IpAddr='', IpGW='', Status=-1, Mode=0),
MyStruct(ThreadInstance=None, ThreadName='', Mnemonic='', IpAddr='', IpGW='', Status=-1, Mode=0),
MyStruct(ThreadInstance=None, ThreadName='', Mnemonic='', IpAddr='', IpGW='', Status=-1, Mode=0),
MyStruct(ThreadInstance=None, ThreadName='', Mnemonic='', IpAddr='', IpGW='', Status=-1, Mode=0)]'
解决方法:
_replace没有做你认为它做的事情.从docs:
somenamedtuple._replace(kwargs)
Return a new instance of the named tuple replacing specified fields with new values:
>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)
你正在调用_replace但是你永远不会存储它返回的新节点.它返回一个新对象而不是改变对象“就地”的原因是,根据定义,namedtuples是不可变的,即在创建它们之后不能更改它们.
请注意,for循环会创建一个包含对同一节点的四个引用的列表.在这种情况下,这不是一个真正的问题,因为您正在创建的对象都是相同的,并且namedtuple是不可变的,但通常要注意这一点.
总结如下:
from collections import namedtuple
MyStruct = namedtuple('MyStruct', 'ThreadInstance ThreadName Mnemonic IpAddr IpGW Status Mode')
NodeDb = []
Node = MyStruct(None, '', '', '', '', -1, 0)
for id in range(4):
NodeDb.append(Node)
NodeDb[2] = NodeDb[2]._replace(ThreadName='T2',
Mnemonic='ABCD',
IpAddr='192.0.1.2',
IpGW='192.0.1.3',
Status=0,
Mode=2)
print(NodeDb)
内容总结
以上是互联网集市为您收集整理的Python命名元组列表,替换属性全部内容,希望文章能够帮你解决Python命名元组列表,替换属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。