鱼C论坛

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

[技术交流] cookbook 1.18

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

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

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

x

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

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

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

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

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


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


  14. print(compute_cost(recodes, test))
复制代码
信息(name='大马强', age=18)
大马强 18
蔬菜一共102.2元

namedtuple 可以视作字典的代替,但是比字典空间小效率高,但namedtuple对象不能像字典一样直接修改数据
_replace 可以修改属性,但是返回的是一个新对象

二、_replace方法

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

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


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


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


  6. a = {"name": "白菜", "price": 18, "addr": "海南"}
  7. new = replace(a)
  8. print(new)
复制代码
蔬菜(name='白菜', price=18, addr='海南', time=None)


本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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