반응형
introducing python 을 통해서 알게된 네임드 튜플이다.
간단하게 정리하자면
보통 튜플의 경우에는 인덱스를 통해서 튜플 접근이 가능한데, namedtuple 을 사용하면
key 값으로 접근이 가능하다고 볼 수 있다.
즉, key - value 로 작동하는 딕셔너리와 같이 작동한다고 보면 되지만, 튜플의 성질을 가진다.
(참 뭔가 애매한것 같다..)
네임드 튜플은 아래와 같은 특성을 지니고 있다는데
1. 튜플의 기본 성질인 불변 객체
2. 일반 Class(객체) 형태보다 적은 메모리 사용
3. 다양한 접근법 지원(괄호, )
4. Dictionary Key 와 같이 사용
아래의 예제가 네임드 튜플의 특성을 잘 보여주는 것 같다.
from collections import namedtuple
from math import sqrt
pt1 = (1.0, 5.0)
pt2 = (2.5, 1.5)
line_leng1 = sqrt((pt2[0] - pt1[0])**2 + (pt2[1] - pt1[1])**2)
print(line_leng1)
# 네임드 튜플 선언
Point = namedtuple('Point', 'x y')
# 두 점 선언
pt1 = Point(1.0, 5.0)
pt2 = Point(2.5, 1.5)
# 두점 사이 거리 계산
line_leng2 = sqrt((pt2.x - pt1.x)**2 + (pt2.y - pt1.y) ** 2)
# 출력
print(line_leng2)
print(line_leng1 == line_leng2)
# 네임드 튜플 사용
Point1 = namedtuple('Point', ['x', 'y'])
Point2 = namedtuple('Point', 'x, y')
Point3 = namedtuple('Point', 'x y')
Point4 = namedtuple('Point', 'x y x class', rename=True) # default = False
# 출력
print(Point1, Point2, Point3, Point4)
print()
print()
# dict to unpacking
temp_dict = {'x':75, 'y': 55}
# 객체 생성
pt1 = Point1(x=10, y=35)
pt2 = Point2(20, 40)
pt3 = Point3(45, y=20)
pt4 = Point4(10,20,30,40)
pt5 = Point3(**temp_dict)
# 출력
print('pt1:',pt1,'\n','pt2:', pt2,'\n','pt3:', pt3,'\n','pt4:', pt4,'\n','pt5:', pt5,'\n')
print()
print()
# 사용
print(pt1[0] + pt2[1])
print(pt1.x + pt2.y)
결과 이미지는 아래와 같다
참고 링크
https://niceman.tistory.com/197
반응형
'언어 > Python' 카테고리의 다른 글
[Python] isinstance 함수 (0) | 2020.07.16 |
---|---|
[python] : for in 반복문, range, enumerate (0) | 2020.07.15 |
파이썬의 다형성(Polymorphism) (0) | 2020.06.20 |
파이썬 데코레이터에 대해서? (0) | 2020.06.20 |
[pandas] : 판다스 전처리 할때 도움될만한 코드들 (0) | 2020.06.11 |