鱼C论坛

 找回密码
 立即注册
查看: 1079|回复: 0

[技术交流] cookbook 1.18

[复制链接]
发表于 2022-1-20 22:38:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

将名字映射到序列变量中去

问题描述:
        不用通常通过下标或索引的方法来访问列表元组

一、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)


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表