코드 내용
#Chapter03-04
# namedTuple의 사용
# 파이썬의 핵심 -> 시퀀스(Sequence), 반복(Iterator), 함수(Function), Class(클래스)
# 클래스 안에 정의할 수 있는 특별한(Built-in) 메서드
# 객체 -> 파이썬의 데이터를 추상화
# 모든 객체 -> id, type -> value
# 일반적인 튜플
pt1 = (1.0, 5.0)
pt2 = (2.5, 1.5)
from math import sqrt
l_leng1 = sqrt((pt1[0]-pt2[0])**2 + (pt1[1]-pt2[1])**2)
print(l_leng1)
# 네임드 튜플 사용 - 네임드 튜플은 tuple과 dict를 결합해놓은 것 같은 자료형임
from collections import namedtuple
# 네임드 튜플 선언
Point = namedtuple('Point','x y') # x, y가 Key나 마찬가지
pt3 = Point(1.0, 5.0)
pt4 = Point(2.5, 1.5)
# print(pt3)
# print(pt4)
l_leng2 = sqrt((pt3.x - pt4.x)**2 + (pt3.y - pt4.y)**2)
print(l_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)
# 객체 생성
tmp_dict = {'x': 75, 'y':35}
p1 = Point1(10,3)
p2 = Point2(x=20,y=30)
p3 = Point3(y=30,x=310)
p4 = Point4(10,20,30,40)
p5 = Point3(**tmp_dict)
print()
print(p1)
print(p2)
print(p3)
# rename 테스트
print(p4)
print(p5)
#사용
print(p1[0] + p2[1])
print(p1.x + p2.y)
# Unpacking
x, y = p3
print(x, y)
# 네임드 튜플 메소드
# _make : 다른 객체를 인수로 받아서 mapping한 namedTuple 객체 생성
tmp = [10, 35] # List와 Tuple로 가능, Dict으로는 안되는데, 이는 **Dict_tmp를 이용하는게 나을듯 Point(**Dict_tmp)
p1 = Point1._make(tmp)
print(p1)
# _fileds : 필드 이름 확인
print(Point1._fields, Point2._fields, Point3._fields, Point4._fields) # rename 된 이후의 필드 이름으로 나옴
# _asDict : namedtuple을 OrderedDict로 변환
b = p1._asdict()
print(b['x'])
# 실사용 실습
# 한 반 20명, 4개의 반(A, B, C, D) A1~A20, B1~B20 ,...
Classes = namedtuple('Classes', 'rank number')
# Classes = namedtuple('Classes', ['rank', 'number'])
# Classes = namedtuple('Classes', 'rank, number')
# List Comprehension
numbers = [str(n) for n in range(1, 21)]
ranks = 'A B C D'.split()
students = [Classes(rank, number) for rank in ranks for number in numbers]
# 추천
students2 = [Classes(rank, number)
for rank in 'A B C D'.split()
for number in [str(n)
for n in range(1, 21)]]
# 출력
for s in students2:
print(s)
출력 결과
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6
code\extensions\ms-python.python-2020.5.80290\pythonFiles\lib\python\debugpy\wheels\debugpy\launcher' '56692' '--' 'c:\Users\82107\Desktop\파이썬중급강의\p_study\chapter03_03.py'
3.8078865529319543
Point(x=1.0, y=5.0)
Point(x=2.5, y=1.5)
3.8078865529319543
PS C:\Users\82107\Desktop\파이썬중급강의\p_study> cd 'c:\Users\82107\Desktop\파이썬중급강의\p_study'; & 'C:\Users\82107\AppData\Local\Programs\Python\Python37\python.exe' 'c:\Users\82107\.vscode\extensions\ms-python.python-2020.5.80290\pythonFiles\lib\python\debugpy\wheels\debugpy\launcher' '56712' '--' 'c:\Users\82107\Desktop\파이썬중급강의\p_study\chapter03_04.py'
3.8078865529319543
3.8078865529319543
<class '__main__.Point'> <class '__main__.Point'> <class '__main__.Point'> <class '__main__.Point'>
Point(x=10, y=3)
Point(x=20, y=30)
Point(x=310, y=30)
Point(x=10, y=20, _2=30, _3=40)
Point(x=75, y=35)
40
40
310 30
Point(x=10, y=35)
('x', 'y') ('x', 'y') ('x', 'y') ('x', 'y', '_2', '_3')
10
Classes(rank='A', number='1')
Classes(rank='A', number='2')
Classes(rank='A', number='3')
Classes(rank='A', number='4')
Classes(rank='A', number='5')
Classes(rank='A', number='6')
Classes(rank='A', number='7')
Classes(rank='A', number='8')
Classes(rank='A', number='9')
Classes(rank='A', number='10')
Classes(rank='A', number='11')
Classes(rank='A', number='12')
Classes(rank='A', number='13')
Classes(rank='A', number='14')
Classes(rank='A', number='15')
Classes(rank='A', number='16')
Classes(rank='A', number='17')
Classes(rank='A', number='18')
Classes(rank='A', number='19')
Classes(rank='A', number='20')
Classes(rank='B', number='1')
Classes(rank='B', number='2')
Classes(rank='B', number='3')
Classes(rank='B', number='4')
Classes(rank='B', number='5')
Classes(rank='B', number='6')
Classes(rank='B', number='7')
Classes(rank='B', number='8')
Classes(rank='B', number='9')
Classes(rank='B', number='10')
Classes(rank='B', number='11')
Classes(rank='B', number='12')
Classes(rank='B', number='13')
Classes(rank='B', number='14')
Classes(rank='B', number='15')
Classes(rank='B', number='16')
Classes(rank='B', number='17')
Classes(rank='B', number='18')
Classes(rank='B', number='19')
Classes(rank='B', number='20')
Classes(rank='C', number='1')
Classes(rank='C', number='2')
Classes(rank='C', number='3')
Classes(rank='C', number='4')
Classes(rank='C', number='5')
Classes(rank='C', number='6')
Classes(rank='C', number='7')
Classes(rank='C', number='8')
Classes(rank='C', number='9')
Classes(rank='C', number='10')
Classes(rank='C', number='11')
Classes(rank='C', number='12')
Classes(rank='C', number='13')
Classes(rank='C', number='14')
Classes(rank='C', number='15')
Classes(rank='C', number='16')
Classes(rank='C', number='17')
Classes(rank='C', number='18')
Classes(rank='C', number='19')
Classes(rank='C', number='20')
Classes(rank='D', number='1')
Classes(rank='D', number='2')
Classes(rank='D', number='3')
Classes(rank='D', number='4')
Classes(rank='D', number='5')
Classes(rank='D', number='6')
Classes(rank='D', number='7')
Classes(rank='D', number='8')
Classes(rank='D', number='9')
Classes(rank='D', number='10')
Classes(rank='D', number='11')
Classes(rank='D', number='12')
Classes(rank='D', number='13')
Classes(rank='D', number='14')
Classes(rank='D', number='15')
Classes(rank='D', number='16')
Classes(rank='D', number='17')
Classes(rank='D', number='18')
Classes(rank='D', number='19')
Classes(rank='D', number='20')
PS C:\Users\82107\Desktop\파이썬중급강의\p_study>