python-命名元组-namedtuple

1.18 我们平时写代码都是通过索引,或者下标来访问列表或者元组,有时候会使得代码特别难度。
  • 通过 collections.namedtuple() 命名元组,它实际是一种工厂方法,用很小的开销,可以得到返回标准的子类,可以通过字段来得到要返回的值。
>>> from collections import namedtuple
>>> SubObject = namedtuple('ss',['addr','phone'])
>>> sub = SubObject("beijing","1361111111")
>>> sub
ss(addr='beijing', phone='1361111111')
>>> sub.addr
'beijing'
>>> sub.phone
'1361111111'
>>>
  • namedtuple 返回的实例也支持所有元组的操作。比如:
>>> len(sub)
2
>>> addr,phone = sub
>>> addr
'beijing'
>>> phone
'1361111111'
>>>
  • 命名元组namedtuple的主要作用就是,将代码和他所控制元素的位置解耦

  • 那么假如

  1. 从数据库中得到了一个大型的元组
  2. 如果通过元素位置访问数据,若再表单中增加了一列数据,那么代码就会崩溃。
    3.如果先将返回的元组转为命名元组,再进行操作,就不会出现问题。
  • 用下标方式操作如下
>>> records =[["test","10","30"]]
>>> def compute_cost(records):
...     total = 0.0
...     for rec in records:
...         total = int(rec[1])*int(rec[2])
...     return total
...
>>> compute_cost(records)
300
>>>
  • 使用命名元组方式如下,可避免因为增加列而代码崩溃
>>> records =[["test","10","30"]]
>>> Stock = namedtuple('Stock',["name","number","price"])
>>> def compute_cost(records):
...     total = 0.0
...     for rec in records:
...         s = Stock(*rec)
...         total = int(s.number)*int(s.price)
...     return total
...
>>> compute_cost(records)
300
>>>
  • 注意: namedtuple的元素是不可被赋值的,即不可被修改的
>>> Stock = namedtuple('Stock',["name","number","price"])
>>> s = Stock("tt","2","15")
>>> s
Stock(name='tt', number='2', price='15')
>>> s.price
'15'
>>> s.price="20"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
>>>
  • 若要修改则使用_replace()方法
>>> s = s._replace(price="20")
>>> s
Stock(name='tt', number='2', price='20')
>>> s.price
'20'
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值