python教程命名元组示例分析

 更新时间:2021年09月29日 09:16:32   作者:沉沉沉小姐  
这篇文章是python教程篇,主要为大家介绍了Python中命名元组的示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

实际上 collections.namedtuple() 是一个工厂方法,它返回的是python中标准元组类型的子类。我们提供给它一个类型名称以及相应的字段,它就返回一个可实例化的类为你已经定义好的字段传入值等。

from collections import namedtuple
Subscriber = namedtuble('Subscriber', ['addr', 'joined'])
sub = Subscriber('jonesy@example.com', '2012-10-19')
print(sub)
# Subscriber(addr='jonesy@example.com', joined='2012-10-19') 
print(sub.addr)
# 'jonesy@example.com'
print(sub.joined)
# '2012-10-19'

尽管namedtuple的实例看起来像一个普通的类实例,但它的实例与普通的元组是可互换的,而且支持所有普通元组所支持的操作。例如:索引和分解

print(len(sub))
# 2
addr, joined = sub
print(addr)
# 'jonesy@example.com' 
print(joined)
# '2012-10-19'

命名元组的主要作用在于将代码同它所控制的元素位置间解耦。所以,如果从数据库调用中得到一个大型的元组列表,而且通过元素的位置来访问数据,那么假如在表单中新增了一列数据,那么代码就会崩溃。但如果首先将返回的元组转型为命名元组,就不会出现问题。

from collections import namedtuple
 
Stock = namedtuple('Stock', ['name', 'shares', 'price'])
def compute_cost(records):
    total = 0.0
    for rec in records:
        s = Stock(*rec)
        total += s.shares * s.price
        # 若此处为 total += s[1] * s.[2] 则数据一变,代码也不对
    return total

注意:namedtuple 是不可变的 (immutable)

s = Stock('ACEM', 100, 123.45)
print(s)
# Stock(name='ACME', share=100, price=123.45)
s.share = 75
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# AttributeError: can't set attribute

如果需要修改任何属性,可以通过使用 namedtuple 实例的 _replace() 方法来实现,该方法创建了一个全新的命名元组,并对相应的值做替换。

s = s._replace(share=75)
print(s)
# Stock(name='ACME', share=75, price=123.45)

_replace() 方法有一个微妙的用途,那就是它可以作为一种简便的方法填充具有可选或缺失字段的命名元组。要做到这点,首先创建一个包含默认值的“原型”元组,然后使用 _replace() 方法创建一个新的实例,把相应的值替换掉

from collection import namedtuple
Stock = namedtuple('Stock', ['name', 'share', 'price', 'data', 'time'])
# Create a prototype instance
stock_prototype = Stock('', 0, 0.0, None, NOne) 
# Function to convert a dictionary to a Stock
def dict_to_stock(s):
    return stock_prototype.replace(**s)

让我们来演示一下上面的代码是如何工作的:

>>> a = {'name': 'ACME', 'shares': 100, 'price': 123.45}
>>> dict_to_stock(a)
Stock(name='ACME', shares=100, price=123.45, date=None, time=None)
>>> b = {'name': 'ACME', 'shares': 100, 'price': 123.45, 'date': '12/17/2012'}
>>> dict_to_stock(b)
Stock(name='ACME', shares=100, price=123.45, date='12/17/2012', time=None)

如果我们的目标是定义一个高效的数据结构,而且将来会修改各种实例属性,那么使用 namedtuple 并不是最佳选择

以上就是python教程命名元组示例分析的详细内容,更多关于python命名元组的资料请关注脚本之家其它相关文章!

相关文章

  • 关于Python turtle库使用时坐标的确定方法

    关于Python turtle库使用时坐标的确定方法

    这篇文章主要介绍了关于Python turtle库使用时坐标的确定方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python 中@property的用法详解

    Python 中@property的用法详解

    这篇文章主要介绍了Python 中@property的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • python3中确保枚举值代码分析

    python3中确保枚举值代码分析

    在本篇文章里小编给大家整理的是一篇关于python3中确保枚举值代码分析内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • Python实现统计给定列表中指定数字出现次数的方法

    Python实现统计给定列表中指定数字出现次数的方法

    这篇文章主要介绍了Python实现统计给定列表中指定数字出现次数的方法,涉及Python针对列表的简单遍历、计算相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • python实现数通设备端口监控示例

    python实现数通设备端口监控示例

    这篇文章主要介绍了python实现数通设备端口监控示例,需要的朋友可以参考下
    2014-04-04
  • 使用Python+selenium实现第一个自动化测试脚本

    使用Python+selenium实现第一个自动化测试脚本

    这篇文章主要介绍了使用Python+selenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python3 常用数据标准化方法详解

    Python3 常用数据标准化方法详解

    这篇文章主要介绍了Python3 常用数据标准化方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)

    Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)

    这篇文章主要介绍了Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母),列表中每个元素相当于一个单词,要实现列表中前一个单词末字母是下一个单词的首字母,并且这个链是最长的。感兴趣的可以了解一下
    2020-12-12
  • flask 使用 flask_apscheduler 做定时循环任务的实现

    flask 使用 flask_apscheduler 做定时循环任务的实现

    这篇文章主要介绍了flask 使用 flask_apscheduler 做定时循环任务的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python3 列表,数组,矩阵的相互转换的方法示例

    Python3 列表,数组,矩阵的相互转换的方法示例

    这篇文章主要介绍了Python3 列表,数组,矩阵的相互转换的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论