6.14.1 네임드 튜플

  • 네임드 튜플은 튜플의 서브 클래스다. 이름(name)과 위치(offset)로 값에 접근할 수 있다.
  • 파리썬에서 네임드 튜플은 자동으로 지원되지 않는다. 그래서 네임드 튜플을 쓰기 전에 모듈을 불러와야 한다.
    from collections import namedtuple
    Duck = namedtuple('Duck', 'bill tail temp')
    duck = Duck('wide orange', 'long', 'temp')
    
    duck
    

    Duck(bill=’wide orange’, tail=’long’, temp=’temp’)

    duck.bill
    

    ‘wide orange’

    duck.tail
    

    ‘long’

    duck.temp
    

    ‘temp’

    parts = {'bill': 'wide orange', 'tail': 'long', 'temp': 'temp'}
    
    duck2 = Duck(**parts)
    
    duck2
    

    Duck(bill=’wide orange’, tail=’long’, temp=’temp’) **parts는 키워드다. parts 딕셔너리에서 키와 값을 추출하여 Duck()의 인자로 제공한다.

    duck2 = Duck(bill='wide orange', tail='long', temp='temp')
    
    duck2
    

    Duck(bill=’wide orange’, tail=’long’, temp=’temp’)

  • 네임드 튜플은 불변한다. 하지만 필드를 바꿔서 또 다른 네임드 튜플을 반환할 수 있다.
    duck3 = duck2._replace(tail='magnificent', bill='crushing')
    
    duck3
    

    Duck(bill=’crushing’, tail=’magnificent’, temp=’temp’)

    duck_dict = {'bill':'wide orange', 'tail': 'long', 'temp':'temp'}
    
    duck_dict
    

    {‘bill’: ‘wide orange’, ‘tail’: ‘long’, ‘temp’: ‘temp’}

    duck_dict['color'] = 'green'
    
    duck_dict
    

    {‘bill’: ‘wide orange’, ‘color’: ‘green’, ‘tail’: ‘long’, ‘temp’: ‘temp’}

  • 딕셔너리는 네임드 튜플이 아니다.
    duck.color = 'green'
    
      AttributeError Traceback (most recent call last)
      <ipython-input-39-eecc5df363d5> in <module>()
      ----> 1 duck.color = 'green'
    
      AttributeError: 'Duck' object has no attribute 'color'
    
  • 불변하는 객체 처럼 행동한다.
  • 객체보다 공간 효츌성과 시간 효율성이 더 좋다.
  • 딕셔너리 형식의 괄호([])대신, 점(.) 표기법으로 속성을 접근할 수 있다.
  • 네임드 튜플을 딕셔너리의 키처럼 쓸 수 있다.

Comments