前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【python高级编程】namedtuple用法--给元组中的每个元素命名

【python高级编程】namedtuple用法--给元组中的每个元素命名

作者头像
用户7886150
修改2020-12-24 10:21:13
2.4K0
修改2020-12-24 10:21:13
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中的命名元组Namedtuple

为什么要给元组中的每个元素命名 

给每个元组中的元素命名,我们就可以使用名字去访问对应元素,相对于索引访问,这样可以大大提高程序的可读性。 

使用元组赋值法 

在c语言中,我们可以定义常量来命令,或者使用枚举变量来完成,而在python中,可以使用元组赋值法进行。 假设我们有一个元组,从0-2的索引分别对饮与,NAME,AGE,GRADE,我们可以用以下方式去完成: 

NAME, AGE, GRADE = range(0, 3)

使用namedtuple 

namedtuple是collections模块中的一个工厂函数,使用此函数可以创建一个可读性更强的元组。 调用该函数后,它会返回一个tuple类型的子类(python的基本数据类型都是类),这个子类的中文名称为具名元组。 

在使用普通的元组时,我们只能通过索引下标去访问对应元素,而namedtuple,我们既可以使用索引下标去访问,也可以通过名字去访问,增加了代码的可读性。 

另外,我们也不用去考虑性能问题,因为具名元组和普通元组所需要的内存空间相同。 

下面我们来看namedtuple方法的参数。 下面是2个必传参数,typename和field_names,一般我们只会用到这两个参数。 

typename: 参数类型为字符串,具名元组返回一个元组子对象,我们要为这个对象命名,传入typename参数即为子对象的名称。 

field_names: 参数类型为字符串序列,用于为创建的元组的每个元素命名,可以传入像[‘a’, ‘b’]这样的序列,也可以传入'a b'或'a, b'这种被分割字符分割的单字符串,但必须是合法标识符。 

from collections import namedtuple

Student = namedtuple("Student", ['name', 'age', 'grade'])

d1 = Student("小明", 18, 100)

d2 = Student(name="小王", grade=99, age=18) # 函数的指定具体参数名传参

print(d1)

print(d2)

print(d1[0]) # 可通过索引访问

print(d2.name)  # 可通过属性名访问

注:具名元组在存储csv或者sqlite3返回数据的时候特别有用。 

使用具名元组创建一副纸牌 

import collections

# 将纸牌定义为具名元组,每个纸牌都有等级和花色

Card = collections.namedtuple('Card', 'rank suit')

class FrenchDeck:

    # 等级2-A

    ranks = [str(n) for n in range(2,11)] + list('JQKA')

    # 花色红黑方草

    suits = 'spades diamonds clubs hearts'.split()

    # 构建纸牌

    def __init__(self):

        self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]

    # 获取纸牌

    def __getitem__(self, position):

        return self._cards[position]

>>> french_deck = FrenchDeck()

>>> french_deck[0]

Card(rank='2', suit='spades')

>>> french_deck[0].rank

'2'

>>> french_deck[0].suit

'spades'

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档