Python 学习之namedtuple的使用

本文和大家分享的主要是python中namedtuple的使用相关内容,一起来看看吧,希望对大家 学习python 有所帮助。
  Python的collections模块在基础数据类型的基础上,提供了几个额外的数据类型:namedtuple, defaultdict, deque, Counter, OrderedDict等,其中defaultdict和namedtuple是两个很实用的扩展类型。我一贯的风格就是学一个数据类型,就想去看看源码,虽然看不太懂,但是总比不看的强,之前java的集合源码阅读也是基于这样一个目的。今天就从使用和源码的角度来看一下namedtuple。
  namedtuple是继承自tuple的子类。namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性。
  定义namedtuple
  类的声明
  class NamedTuple(tuple):
  _fields = ...  # type: Tuple[str, ...]
  def __init__(self, typename: str, fields: Iterable[Tuple[str, Any]], *,
  verbose: bool = ..., rename: bool = ..., module: Any = ...) -> None: ...
  @classmethod
  def _make(cls, iterable: Iterable[Any]) -> NamedTuple: ...
  def _asdict(self) -> dict: ...
  def _replace(self, **kwargs: Any) -> NamedTuple: ...
  定义一个namedtuple的User类型
  User = collections.namedtuple('User', ['age', 'name'])
  或者User = collections.namedtuple('User', 'age, name')
  或者User = collections.namedtuple('User', 'age name')
  对应源码
  def 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)
  """
  # Validate the field names.  At the user's option, either generate an error
  # message or automatically replace the field name with a valid name.
  if isinstance(field_names, str):
  field_names = field_names.replace(',', ' ').split()
  field_names = list(map(str, field_names))
  创建对象
  user = User = (21, 'StormMa')
  或者user = User(age=21, name='StormMa')
  或者user = User._make([21, 'name'])
  属性访问
  # 年龄user.age
  # 姓名user.name
  转换成字典
  user_dict = user._asdict()
  # 访问
  user_dict['name']
  user_dict['age']
  替换属性值
  user2 = user._replace(age=20)

来源:CSDN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值