python 命名元组_python 高级进阶之命名元组

元组元素的命名

对于一个元组如:

>>> s = ('Jack', 21, 'male', '5788666@qq.com')

要得到该对象的名字,年龄,性别及邮箱的方法为:s[0],s[1],s[2],s[3]。那么如果程序中充斥了大量的这种没有意义的索引数字,则会影响代码的可读性。所以考虑以下方法来解决这个问题:

方法一:

>>> NAME = 0

>>> AGE = 1

>>> SEX = 2

>>> EMAIL = 3

# 或者通过这样定义

>>> NAME, AGE, SEX, EMAIL = xrange(4)

则此时就可以通过s[NAME],s[AGE],s[SEX],s[EMAIL]这种见名知意的方式来获取所需值。

方法二:

命名元组(利用 collections 模块中的 namedtuple 函数)

>>> from collections import namedtuple

>>> Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])

>>> s = Student('Jim', 21, 'male', '123@qq.com')

>>> s.name

'Jim'

>>> s.age

21

namedtuple 函数这里接收两个参数,第一个参数为要创建类型的名称,第二个参数是一个列表,代表了每一个索引的名字。当建立完这个 Student 类之后,就可以使用正常的构造方法来构造新的对象如 s,并且可以直接通过访问属性的方式来访问所需要的值。

此时使用isinstance函数对比内置的tuple:

>>> isinstance(s, tuple)

True

可见用namedtuple构造出来的类其本质就是一个tuple元组,所以仍然可以使用下标的方式来访问属性。并且在任何要求类型为元组的地方都可以使用这个namedtuple。

参考文档:

namedtuple(typename, field_names, verbose=False, rename=False)

Returns a new subclass of tuple with named fields.

>>> Point = namedtuple('Point', ['x', 'y'])

>>> Point.__doc__ # docstring for the new class

'Point(x, y)'

>>> p = Point(11, y=22) # instantiate with positional args or keywords

>>> p[0] + p[1] # indexable like a plain tuple

33

>>> x, y = p # unpack like a regular tuple

>>> x, y

(11, 22)

>>> p.x + p.y # fields also accessable by name

33

>>> d = p._asdict() # convert to a dictionary

>>> d['x']

11

>>> Point(**d) # convert from a dictionary

Point(x=11, y=22)

>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields

Point(x=100, y=22)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值