大马强 发表于 2022-1-20 22:38:02

cookbook 1.18


将名字映射到序列变量中去
问题描述:
        不用通常通过下标或索引的方法来访问列表元组

一、namedtuple函数
subscriber = namedtuple("信息", ["name", "age"])# 创建namedtuple对象
dmq = subscriber("大马强", 18)
print(dmq)
print(dmq.name, dmq.age)

test = namedtuple("蔬菜", ["name", "shares", "price"])

recodes = (["萝卜", 5, 12.2], ["青菜", 1, 1.2], [
         "辣椒", 2, 2.2], ["芹菜", 3, 11.2], ["南瓜", 10, 0.2])


def compute_cost(recodes, test):
    total = 0.0
    for i in recodes:
      t = test(*i)
      total += t.shares * t.price# 利用映射的名字来操作
    return f"蔬菜一共{total}元"


print(compute_cost(recodes, test))
信息(name='大马强', age=18)
大马强 18
蔬菜一共102.2元
namedtuple 可以视作字典的代替,但是比字典空间小,效率高,但namedtuple对象不能像字典一样直接修改数据
_replace 可以修改属性,但是返回的是一个新对象

二、_replace方法

# 创建一个可选择缺失字段德命名元组

test = namedtuple("蔬菜", ["name", "price", "addr", "time"])


o_data = test("", 0, None, None)# 创建一个原型


def replace(parm):
    return o_data._replace(**parm)# ?**


a = {"name": "白菜", "price": 18, "addr": "海南"}
new = replace(a)
print(new)

蔬菜(name='白菜', price=18, addr='海南', time=None)

页: [1]
查看完整版本: cookbook 1.18