Python中namedtuple 命名元祖的使用
作者:@@老胡 发布时间:2023-02-20 15:06:00
前言
from collections import namedtuple()命名元祖的工厂函数:
在python中,collections 包中的 namedtuple() 函数可以创建命名元组,并提供可读性和自文档性。它可以用于普通元组并使用名称或索引获取值。例子如下:
from collections import namedtuple
"""
collections 包中的 namedtuple() 函数可以创建命名元组,
并提供可读性和自文档性。
它可以用于普通元组并使用名称或索引获取值。
"""
# 创建一个命名元祖子类User,其中的索引为name和age
User=namedtuple('User',['name','age'])
u=User('kerun',22)
print(u) # User(name='kerun', age=22)
print(type(u)) # <class '__main__.User'>
语法
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
typename 是创建得到的元组子类名
field_names 域名序列,可以是一个字符串序列 [x, y],或者用空格、逗号隔开的字符串 x y 或 x, y ;任何有效的字符串都可以当做域名,除了以下划线和数字开头的字符串和关键字,比如 _name, ‘class’ 等
rename 无效域名会自动转换成位置名。比如 [‘abc’, ‘def’, ‘ghi’, ‘abc’] 转换成 [‘abc’, ‘_1’, ‘ghi’, ‘_3’] , 消除关键词 def 和重复域名 abc。
defaults 可以为 None 或者是一个默认值的 iterable 。如果一个默认值域必须跟其他没有默认值的域在一起出现,defaults 就应用到最右边的参数。比如如果域名 [‘x’, ‘y’, ‘z’] 和默认值 (1, 2) ,那么 x 就必须指定一个参数值 ,y 默认值 1 , z 默认值 2 。
module 值如果有定义,命名元组的 module 属性值就被设置。
命名元组实例没有字典,所以它们要更轻量,并且占用更小内存。
除了继承元祖的昂发外,命名元祖还支持三个额外的方法和两个属性,wield防止域名冲突,方法和属性以下划线开始
classmethod somenamedtuple._make(iterable) 类方法从存在的序列或迭代实例创建一个新实例。
t=User._make(['kerun',18])
print(t)# User(name='kerun', age=18)
somenamedtuple._asdict() 返回一个新的 OrderedDict ,它将字段名称映射到它们对应的值
a=t._asdict()
print(t)# User(name='kerun', age=18)
print(a)# {'name': 'kerun', 'age': 18}
somenamedtuple._replace(**kwargs) 返回一个新的命名元组实例,并将指定域替换为新的值
b=t._replace(name='jj')
print(t)# User(name='kerun', age=18)
print(b)# User(name='jj', age=18)
somenamedtuple._fields 字符串元组列出了域名。用于提醒和从现有元组创建一个新的命名元组类型。
print(t._fields)# ('name', 'age')
somenamedtuple._field_defaults 默认值的字典。
>>> User = namedtuple('User', ['name', 'age'], defaults=['wxnacy', 18])
>>> u = User()
>>> u._fields_defaults
{'name': 'wxnacy', 'age': 18}
完整代码
from collections import namedtuple
"""
collections 包中的 namedtuple() 函数可以创建命名元组,
并提供可读性和自文档性。
它可以用于普通元组并使用名称或索引获取值。
"""
# 创建一个命名元祖子类User,其中的索引为name和age
User=namedtuple('User',['name','age'])
u=User('kerun',22)
print(u) # User(name='kerun', age=22)
print(type(u)) # <class '__main__.User'>
t=User._make(['kerun',18])
print(t)# User(name='kerun', age=18)
a=t._asdict()
print(t)# User(name='kerun', age=18)
print(a)# {'name': 'kerun', 'age': 18}
b=t._replace(name='jj')
print(t)# User(name='kerun', age=18)
print(b)# User(name='jj', age=18)
print(t._fields)# ('name', 'age')
来源:https://blog.csdn.net/CodePlayMe/article/details/130078664


猜你喜欢
- <title>动态序列比对</title> <script> function pairaln(seq1
- 阿里云 视频直播 配置 及 PHP-SDK 接入教程个人感觉,阿里的文档比微信的要坑很多…微信最多是有些比较重要的东西放到比较不起眼、比较难
- 前言Go语言的序列化与反序列化在工作中十分常用,在Go语言中提供了相关的解析方法去解析JSON,操作也比较简单序列化// 数据序列化func
- 数据库锁介绍: https://www.jb51.net/article/248863.htm一、查询oracle锁定的表:1、锁相关表SE
- # 0. PyCharm 常用快捷键# 1. 查看使用库源码PyCharm 主程序员在 Stackoverflow 上答道经常听人说,多看源
- Python 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了
- # -*-coding:utf-8-*-import sys, os'''将当前进程fork为一个守护进程注意:如果
- 在开始之前,我们先来看看uint 与 int 的区别上面是图,下面是源码:package main import ( "fmt&q
- 在 python2 中,如果想要自定义评价标准的话,可以这么做def cmp(a, b): # 如果逻辑上认为 a < b ,返回 -
- 在项目过程中,需要设置各种IP和端口号信息等,如果每次都在源程序中更改会很麻烦(因为每次都要重启项目重新加载配置信息),因此将需要修改的参数
- #!/usr/bin/perl -wuse strict;use warnings;use FileHandle;my %fh;my @ar
- 很多时候,希望能够在 HTML 中使用空格排版。但浏览器在解析 HTML 时,会把连续的空格解析成一个,所以我们会使用
- 最近 PEP 570被接受了,其实要加的这个Positional-Only Parameters原来在内置的C函数上有很多都用到了:In :
- 本文主要是利用scapy包编写了一个简易扫描工具,支持ARP、ICMP、TCP、UDP发现扫描,支持TCP SYN、UDP端口扫描,如下:u
- 如下所示:# -*- coding: utf-8 -*-import sysfrom PyQt5.QtWidgets import (QAp
- 1.准备工作(django连接数据库)1.本机电脑下载好mysql数据库2.打开django,修改setting.py中的DATABASES
- 使用实例:object.CreateTextFile(filename[, overwrite[, unicode]])其中object是必
- <?php//===============================时间日期=========================
- Sql中in和not in中有null值的情况1)in的逻辑规则是or not in 的逻辑规则是 and2)判断null 的sql语句为
- 一些很实用且必用的js小脚本代码:脚本1:进入页面后自动播放音乐或其它声音文件<embed src="音乐地址&q