[TOC=1,5]
>[success] # 命名元组 -namedtuple
命名元组,类似字典,相比普通元组,只增加了极小的开销提供了这些便利,的一种可能用法是作为字典的替代,后者需要更多的空间来储存,因此如果涉及字典的大型数据结构可以考虑命名元组,会更高效
>[info] ## 使用
~~~
def namedtuple(typename, field_names, verbose=False, rename=False)
1.第一个参数,typename 是元组的名字
2.field_names 字段的名字可以理解成字典的k
3.renme 是否可以重名,或者使用python关键字
4.verbose 是否在控制台输出,具体的定义展示
~~~
* 注 rename,会吧关键字和重复的属性用_的形式重新命名
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined class age age",rename=True)
nt = nametuple("addr","joined","class","age","age2")
print(nt)
打印结果:
nametuple(addr='addr', joined='joined', _2='class', age='age', _4='age2')
~~~
* 注 使用verbose
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined age",verbose=True)
nt = nametuple("addr","joined","class","age","age2")
print(nametuple)
打印结果:
from builtins import property as _property, tuple as _tuple
from operator import itemgetter as _itemgetter
from collections import OrderedDict
class nametuple(tuple):
'nametuple(addr, joined, age)'
.........
~~~
>[danger] ##### 基本使用
~~~
from collections import namedtuple
# 另外两种使用情况见备注
nametuple = namedtuple("nametuple",["addr", "joined"])
nt = nametuple('###addr',"####joined")
print(nametuple)
print(nt)
print(nt.addr)
print(nt.joined)
打印结果:
<class '__main__.nametuple'>
nametuple(addr='###addr', joined='####joined')
###addr
####joined
~~~
* 注:
~~~
nametuple = namedtuple("nametuple","addr, joined")
nametuple = namedtuple("nametuple","addr joined")
~~~
>[danger] ##### 支持普通元组的操作
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined")
nt = nametuple('###addr',"####joined")
addr,joined = nt
print(addr,joined)
print(len(nt))
打印结果:
###addr ####joined
2
~~~
>[danger] 技巧使用-- ([ ],[ ])
* 当处理一些元组嵌套列表,列表中的内容可能会出现变化的情况,例如从数据库中取出一组数据
* 推荐下面的方式二
~~~
# 下面的代码假如新增了数据,就会出现因为下角标定位的问题
def compute_cost(records):
total = 0.0
for rec in records:
total += rec[1]*rec[2]
return total
# 我叫方式二
Stock = namedtuple("Stock",['name',"age","price"])
def compute_cost(records):
total = 0.0
for rec in records:
s = Stock(*rec)
total += s.age * s.price
return total
print(compute_cost(a))
~~~
>[danger] ##### _asdict() 转换成有序的字典
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined class age age",rename=True)
nt = nametuple("addr","joined","class","age","age")
nt_dic = nt._asdict()
print(nt_dic)
~~~
>[danger] ##### 更改值
* 直接改会报错
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined age")
nt = nametuple("addr","joined","age")
# nt.joined =10
~~~
* 未定义更改
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined age")
nt = nametuple("addr","joined","age")
nt._replace(age = "10")
print(nt)
打印结果:
nametuple(addr='addr', joined='joined', age='age')
~~~
* 定义更改
~~~
from collections import namedtuple
nametuple = namedtuple("nametuple","addr joined age")
nt = nametuple("addr","joined","age")
# 重新定义接受变量
nt = nt._replace(age = "10")
print(nt)
打印结果:
nametuple(addr='addr', joined='joined', age='10')
~~~
>[danger] ##### 字典转换成命名元组
~~~
def dict_to_stock(s):
return namedtuple.__replace(**s)
~~~
- PYTHON-- 基础
- Python -- 变量、常量、注解
- 算数\比较\赋值\逻辑运算符
- Python -- input 控制台用户输入
- Python -- 流程控制/循环语句
- Python -- 切片
- Python -- 数据类型
- 基础数据类型
- int -- 数字类型
- str -- 字符类型
- bool -- 布尔类型
- list -- 列表
- type -- 元祖
- dict -- 字典
- set -- 集合
- Python -- 深浅copy
- Python -- 文件的读写
- Python -- 函数
- 函数 -- 做参数使用
- 函数 -- 闭包
- 函数 -- 生成器
- 函数 -- 列表推导式
- 案例
- 基础案例一
- 基础案例二
- 基础案例三
- COOKBOOK
- LIST、STR、DICT、TUPLE
- LIST - 列表方法总结
- 一、序列拆分成单独变量
- 二、* 妙用
- 三、deque- 双向队列
- 四、求找到最大或最小的N个元素
- 4.1 heapq-- 简单使用
- 五、去重并保持列表顺序不变
- 六、切片slice
- 七、counter 统计序列中元素次数
- 八、itemgetter 列表套着字典排序
- 九、处理大量的列表数据
- 十、随机事件处理列表
- DICT - 字典的总结方法
- 一、defaultdict 解决 KeyError
- 二、OrdereDict有序字典
- 三、zip 和 max/min 比较
- IDCT和LIST- 推导式
- 一、LIST 推导式
- 二、字典推到式
- TUPLE-元组
- 一、命名元组
- STR-字符串
- 一、常见的字符串方法
- 二、字符串拆分
- 三、字符串的位置匹配
- 四、字符串替换
- 五、正则大小写/换行匹配
- 六、对字节类型处理
- 数字、日期、时间处理
- 一、数字的处理
- 二、时间换算
- 2.1 时间运算
- 2.2计算某一时刻上周几的日期
- 2.2对时间转换格式优化
- 迭代器和生成器
- 一、iter 迭代器 使用案例
- 二、生成器 yeild
- 三、构建一个反向迭代方法
- 四、实现反正函数构造
- 五、迭代对象切片/跳过元素
- 六、迭代出所有的组合排列
- 七、索引-值迭代序列化
- 八、zip 同时迭代多个序列
- 九、同时循环多个可迭代对象
- 十、yield from 递归案例
- 十一、合并序列,并按顺序输出
- 十二、使用 iter 替代 while True
- 操作文件
- 一、处理文件路径
- 二、检测文件/获取文件信息
- 函数
- 一、函数基本案例使用
- 二、匿名函数
- 三、回调函数
- 四、闭包实现一个单个方法类
- 五、函数嵌套回调函数
- 类与对象
- 一、str/repr--让类字符串表示
- 二、format -- 格式化类的内容
- 三、with -- 上下文管理类
- 四、创建节省内存的类
- 五、将类里面方法变成属性
- 六、调用父类方法
- 七、扩展子类中的属性
- 八、创建新的类或者实类属性
- 九、简化数据结果,简化init
- 十、python 接口写法
- 十一、通过类属性创建委托访问
- 十二、__new__重新初始化init
- 十三、通过字符串调用类
- 元编程
- 一、装饰器
- 1.1 去掉装饰器修饰
- 1.2 可接受参数装饰器
- 1.3利用装饰器对函数参数类型检查
- 1.4编写类装饰器
- 1.5为类方法和静态方法加装饰器
- 1.6通过装饰器给装饰函数加参数
- 线程和进程