- 네임드 튜플은 튜플의 서브 클래스다. 이름(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