파이썬(Python) - 네임드 튜플 설명
안녕하세요. 좋은사람 입니다.
오늘은 파이썬 데이터 모델링 파트에서 소개하고 있는 네임드튜플 타입 구조에 대해서 포스팅 합니다.
파이썬에 대용량의 데이터를 적합한 데이터 타입으로 저장하고 효율적인 퍼포먼스로 운영하기 위해서는
제네레이터 패턴 등 많은 활용 방법에 정확하게 이해하고 있어야 한다고 생각됩니다.
보통은 객체를 사용하는 것 보다는 튜플 활용을 공식 레퍼런스에서 추천하고 있습니다.
주로 내장된 데이터 타입 즉, 파이썬 데이터 모델링 파트에서 추천하는 Collections 라이브러리를 활용
하시면 다양한 Container datatypes을 사용하실 수 있습니다.
그럼 하단에서 컨테이너 데이터 타입 중 첫 번째인 네임드 튜플 예제를 설명드리겠습니다.
지난 파이썬 관련 포스팅은 오른쪽 링크를 참고하세요. - 관련 포스팅
파이썬(Python) - 네임드 튜플(namedtuple) 예제 실습
네임드 튜플은 개인적으로 정말 자주 사용하는 데이터 타입입니다. 이유는 아래와 같은 특성을 지니고
있습니다.
- 튜플의 기본 성질인 불변 객체
- 일반 Class(객체) 형태보다 적은 메모리 사용
- 다양한 접근법 지원(괄호, .)
- Dictionary Key 와 같이 사용
네임드 튜플 관련 레퍼런스 - 참조
1. from collections import namedtuple
아래 예제는 두 점 사이의 거리를 구하는 예제입니다. 서로 다른 두 점 (x1, y1, x2, y2) 를 입력 받은 후
사이의 리를 구하는 소스 코드입니다.
일반적인 방법과 네임드 튜플 패키지를 사용한 방법을 비교하시면 자세하고 쉽게 이해가능하실거예요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | # 참조 : https://docs.python.org/3/reference/datamodel.html # 일반적인 튜플 사용 pt1 = (1.0, 5.0) pt2 = (2.5, 1.5) from math import sqrt line_leng1 = sqrt((pt2[0] - pt1[0]) ** 2 + (pt2[1] - pt1[1]) ** 2) print(line_leng1) # 네임드 튜플 임포트 from collections import namedtuple # 네임드 튜플 선언 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} # 객체 생성 p1 = Point1(x=10, y=35) p2 = Point2(20, 40) p3 = Point3(45, y=20) p4 = Point4(10, 20, 30, 40) p5 = Point3(**temp_dict) # 출력 print('EX2-2 -', p1, p2, p3, p4, p5) print() print() # 사용 print(p1[0] + p2[1]) print(p1.x + p2.y) # 클래스 변수 접근 방식 | cs |
4, 5번 라인 : 두 개의 좌표를 튜플 형태로 표현
9번 라인 : 두 점 사이의 거리
14번 라인 : collections 패키지의 namedtuple 선언
17, 20, 21번 라인 : 선언부 및 생성부를 통한 클래스 형태의 특징을 가지고 있음을 확인
24번 라인 : 두 점 사이의 거리(접근 방법 확인)
32~35 라인 : 네임드튜플의 유연하고 다양한 선언 방법
54번 라인 : 출력 확인
이번 예제의 핵심은 바로 선언부 및 접근 방법에 있습니다. 튜플의 성질을 가지고 있으면서 클래스 및 딕셔너리
구조의 접근 방식을 사용해서 원하는 데이터에 접근 할 수 있습니다.
SQL 및 크롤링, 스파크 등에서 수집된 데이터를 체계적으로 관리하고 활용하실 수 있습니다.
2. 코드 실행 확인
정확하게 소스를 이해하시고 직접 실행
실행 해보시기를 권장해 드립니다.
실행 화면
더 많은 메소드 레퍼런스 확인 및 자세한 설명은 -> 클릭
마무리
단순한 예제지만, 파이썬에서 모든 객체는 데이터에 대한 추상화
로 표현 될 수 있는 부분을 보여줄 수
있는 내용이라고 생각합니다.
네임드 튜플을 활용하면 이름을 통해서 필드 값에 엑세스 할 수 있다는 장점과 각 데이터에 대한 레이블
을 활용할 수 있는 큰 장점이 있습니다.
가장 중요한건 내부적으로 상당히 메모리 활용에 최적화 된 데이터 타입이라는 것입니다.
물론 데이터에 알맞은 적합한 컨테이너 구조를 사용하는 것이 중요하다고 생각합니다.
다음 시간에도 파이썬 Collections Data type 패키지에 대해서 포스팅 하도록 하겠습니다.
감사합니다.
소스코드 다운로드 :
python_nametuple_1.zip
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - Redis + RQ(Redis Queue) Task 연동 비동기 예제 소스 (1) | 2020.04.03 |
---|---|
파이썬(Python) - 매직(Special) 메소드 및 연산자 오버라이딩 설명 및 실습 (2) | 2019.07.23 |
파이썬(Python) - 템플릿 메소드(Template Method) 패턴(디자인패턴) (0) | 2019.03.06 |
파이썬(Python) - 팩토리 메소드(Factory Method) 패턴(디자인패턴) (0) | 2019.02.25 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(2) - env 명령어 (2) | 2019.01.26 |