UnfinishedPython
Python的collections模块提供了工厂函数nametuple(),在使用tuples类型的数据时,创建更加Pythonic的代码。

Tuple

Tuple是Python的一种数据结构,tuples的主要特点是其不可修改,另一方面,仅可以通过整形index进行索引访问,先看一个简单的例子:

  1. person = ('Milton', 'Banana', 174)
  2. type(person)
  3. # <type 'tuple'>
  4. # Item accessing
  5. print(person[0], person[1], person[2])
  6. # ('Milton', 'Male', 174)
  7. # Immutability
  8. person[0] = 'Miguel'
  9. """ ----------------
  10. Traceback (most recent call last):
  11. File "<stdin>", line 1, in <module>
  12. TypeError: 'tuple' object does not support item assignment
  13. """

从可读性的角度上来说,上面获取数据的方法可读性较差,需要记住tuples中每个元素所对应的index才可以实现清楚地获取数据。

namedtuple

nametuple可以有效地解决上述的缺点,在tuple基础上增加了names,这样可以使代码可读性更高。

  1. from collections import namedtuple
  2. Person = namedtuple('Person',['name','gender','height'])
  3. person = Person('Curry', 'Male', 30)
  4. issubclass(person, tuple)
  5. print(person)
  6. print(person.name, person.gender, person.height)
  7. person.name='Green'

NameTuple

  1. from typing import NamedTuple
  2. class Person(NamedTuple):
  3. name: str
  4. age: int
  5. height: int
  6. ears: int = 2
  7. eyes: int = 2
  8. milton = Person(
  9. name="Milton",
  10. age=25,
  11. height=174,
  12. eyes=1)
  13. print(milton.name)