2.3 튜플은 단순한 불변 리스트가 아니다 ~ 2.3.4 Namedtuple

 

Remarks

이 글은 전문가를 위한 파이썬(Fluent Python)을 정리한 자료입니다.


2.3 튜플은 단순한 불변 리스트가 아니다

  1. 튜플은 불변 리스트로 사용하거나, 필드명이 없는 레코드로 사용될 수도 있다.

레코드(record)
각기 다른 자료형에 속할 수 있는 필드(field, member, attribute)의 모임
Key를 통해 필드를 검색할 수 있다

2.3.1 레코드로서의 튜플

  1. 튜플은 레코드를 담고 있다.
    튜플의 각 항목은 레코드의 필드 하나를 의미하며 항목의 위치의미를 결정한다.
traveler_ids = [('USA', '1'),
                ('BRA', '2'),
                ('ESP', '3')]

for passport in sorted(traveler_ids):
  print("%s / %s" % passport)

2.3.2 Tuple unpacking (iterable unpacking)

import os
dirname, filename = os.path.split('/home/ydj/.ssh/idrsa.pub')


a, b, *rest = range(5)  # 0, 1, [2, 3, 4]
a, b, *rest = range(2)  # 0, 1, []
a, *rest, c = range(5)  # 0, [1, 2, 3], 4
assert isinstance(rest, list)

2.3.4 Namedtuple

Field의 이름을 붙일 필요가 있을 때 namedtuple()을 사용할 수 있다. namedtuple()은 필드명과 클래스명을 추가한 튜플의 서브클래스를 생성하는 팩토리 함수이다.

from collections import namedtuple


fields = ('name', 'country')  # "name country" 도 가능
City = namedtuple('City', fields)
tokyo = City('Tokyo', 'JP')

tokyo.namedtuple  # 'Tokyo'
tokyo.country     # 'JP'
assert tokyo[1] == tokyo.country
assert tokyo._fields == fields

ordered_dict = tokyo._asdict()