[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通過裝飾器給裝飾函數加參數
- 線程和進程