Training loop Run Builder和namedtuple()函数
namedtuple()函数见:https://www.runoob.com/note/25726和https://www.cnblogs.com/os-python/p/6809467.html
namedtuple:
namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护。
namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,还能够方便的通过属性名来访问数据。
在python中,传统的tuple类似于数组,只能通过下表来访问各个元素,我们还需要注释每个下表代表什么数据。通过使用namedtuple,每哥元素有了自己的名字。类似于C语言中的struct,这样数据的意义就可以一目了然。
生命namedtuple是非常简单方便的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from collections import namedtuple Friend = namedtuple( "Friend" , [ 'name' , 'age' , 'email' ]) f1 = Friend( 'xiaowang' , 33 , 'xiaowang@163.com' ) print (f1) print (f1.name) print (f1.age) print (f1.email) f2 = Friend(name = 'xiaozhang' , email = 'xiaozhang@sina.com' , age = 30 ) print (f2) name, age, email = f2 print (name, age, email) 输出为: Friend(name = 'xiaowang' , age = 33 , email = 'xiaowang@163.com' ) xiaowang 33 xiaowang@ 163.com Friend(name = 'xiaozhang' , age = 30 , email = 'xiaozhang@sina.com' ) xiaozhang 30 xiaozhang@sina.com |
以下参考:https://www.runoob.com/note/25726,并加上自己的一部分理解。
Python元组的升级版本 -- namedtuple(具名元组)
因为元组的局限性:不能为元组内部的数据进行命名,所以往往我们并不知道一个元组所要表达的意义,所以在这里引入了 collections.namedtuple 这个工厂函数,来构造一个带字段名的元组。
具名元组的实例和普通元组消耗的内存一样多,因为字段名都被存在对应的类里面。这个类跟普通的对象实例比起来也要小一些,因为 Python 不会用 __dict__ 来存放这些实例的属性。
namedtuple 对象的定义如以下格式:
1 | collections.namedtuple(typename, field_names, verbose = False , rename = False ) |
返回一个具名元组子类 typename,其中参数的意义如下:
- typename:元组名称
- field_names: 元组中元素的名称
- rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True
- verbose: 默认就好
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import collections # 两种方法来给 namedtuple 定义方法名 User = collections.namedtuple( 'User' , [ 'name' , 'age' , 'id' ]) # User = collections.namedtuple('User', 'name age id') user = User( 'tester' , '22' , '464643123' ) print (user) 输出为: User(name = 'tester' , age = '22' , id = '464643123' ) import collections # 两种方法来给 namedtuple 定义方法名 # User = collections.namedtuple('User', ['name', 'age', 'id']) User = collections.namedtuple( 'User' , 'name age id' ) user = User( 'tester' , '22' , '464643123' ) print (user) 输出为: User(name = 'tester' , age = '22' , id = '464643123' ) |
collections.namedtuple('User', 'name age id') 创建一个具名元组,需要两个参数,一个是类名,另一个是类的各个字段名。
后者可以是有多个字符串组成的可迭代对象,或者是有空格分隔开的字段名组成的字符串(比如本示例)。
具名元组可以通过字段名或者位置来获取一个字段的信息。
输出结果:
1 | User(name = 'tester' , age = '22' , id = '464643123' ) |
具名元组的特有属性:
类属性 _fields:包含这个类所有字段名的元组 类方法 _make(iterable):接受一个可迭代对象来生产这个类的实例 实例方法 _asdict():把具名元组以 collections.OrdereDict 的形式返回,可以利用它来把元组里的信息友好的展示出来.
1 2 3 4 5 6 7 8 9 10 11 12 13 | from collections import namedtuple # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple( 'User' , [ 'name' , 'sex' , 'age' ]) # 创建一个User对象 user = User(name = 'Runoob' , sex = 'male' , age = 12 ) # 获取所有字段名 print ( user._fields ) 输出为: ( 'name' , 'sex' , 'age' ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from collections import namedtuple # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple( 'User' , [ 'name' , 'sex' , 'age' ]) user = User._make([ 'Runoob' , 'male' , 12 ]) print (user) # User(name='user1', sex='male', age=12) # 获取用户的属性 print (user.name) print (user.sex) print (user.age) 输出结果为: User(name = 'Runoob' , sex = 'male' , age = 12 ) Runoob male 12 |
1 2 3 4 5 6 7 8 9 10 | from collections import namedtuple # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple( 'User' , [ 'name' , 'sex' , 'age' ]) user = User._make([ 'Runoob' , 'male' , 12 ]) # 修改对象属性,注意要使用"_replace"方法 user = user._replace(age = 22 ) print (user) 输出结果为: User(name = 'Runoob' , sex = 'male' , age = 22 ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from collections import namedtuple # 定义一个namedtuple类型User,并包含name,sex和age属性。 User = namedtuple( 'User' , [ 'name' , 'sex' , 'age' ]) user = User._make([ 'Runoob' , 'male' , 12 ]) # 修改对象属性,注意要使用"_replace"方法 # user = user._replace(age=22) # print(user) # User(name='user1', sex='male', age=21) # 将User对象转换成字典,注意要使用"_asdict" print (user._asdict()) 输出结果为: { 'name' : 'Runoob' , 'sex' : 'male' , 'age' : 12 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | from collections import namedtuple from collections import OrderedDict # 定义一个namedtuple类型User,并包含name,sex和age属性。 # User = namedtuple('User', ['name', 'sex', 'age']) # user = User._make(['Runoob', 'male', 12]) # 修改对象属性,注意要使用"_replace"方法 # user = user._replace(age=22) # print(user) # User(name='user1', sex='male', age=21) # 将User对象转换成字典,注意要使用"_asdict" # print(user._asdict()) orderdict = OrderedDict([( 'name' , 'Runoob' ), ( 'sex' , 'male' ), ( 'age' , 22 )]) print (orderdict) for key,value in orderdict.items(): print (key,value) 输出结果为: OrderedDict([( 'name' , 'Runoob' ), ( 'sex' , 'male' ), ( 'age' , 22 )]) name Runoob sex male age 22 |
以下内容来自deeplizard pyorch_P31
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用