[기업협업 - koodon] Namedtuple

hyuckhoon.ko·2020년 8월 7일
0

What I learned in wecode

목록 보기
101/109

Namedtuple


1. 일반적인 튜플



color = (55, 155, 255)


--- 중략 ---


print(color[0])

한달 후 이 코드를 봤을때,
color[0]이 무엇을 염두에 두고 작성한 것인지 파악하기 어려울 수도 있다.


대안으로는 어떤 것이 있을까?


2. 딕셔너리

color = {
         'red'   : 55,
         'green' : 155,
         'blue'  : 255
         }
print(color['red'])

가독성이 조금은 좋아보인다.
빨간색, 초록색, 파랑색을 의미함을 알 수 있기 때문이다.

하지만, 유지 보수 측면에서 보면 문제점이 보인다.

새로운 색을 추가할 때마다
keyvalue를 추가해야만 한다.



3. Namedtuple

1. 코드 예시

Color = namedtuple('Color', ['red', 'green', 'blue')
color = Color(55, 155, 255)
print(color.red)
print(color[0])

마치 class Color:를 정의 및 선언하여 사용하는 듯한 구조다.


기존 튜플의 문제점은 가독성 뿐만 아니라
사람에 따라 코드를 다르게 해석할 여지도 있었다.

"color 를 더 추가하려는 의도도 있는건가?"
말하자면 이렇게?
color = (55, 155, 255, 43, 35,)


2. 네임드 튜플 장점 - 1)


네임드 튜플의 장점은

print(color.red) 또는
print(color[0])

과 같은 방식 모두 사용할 수 있다는 것이다.

특히,
color.red방식은 가독성이 뛰어나다.

(요새, 가독성 좋은 코드에 대해 고민을 많이 하고 있다.
그래서 그런지 네임드 튜플이 참 맘에 든다.)

위의 예시는 아래의 유튜브 영상에서 참조했다.
https://www.youtube.com/watch?v=GfxJYp9_nJA



실제 사용은 아래와 같이 한다.

Color = namedtuple('Color', ['red', 'green', 'blue')
white = Color(255, 255, 255)

이 부분은 예술이 아닌가 생각한다.ㅎㅎㅎㅎ

왜냐하면 해석의 여지가 없기 때문이다.

"하얀색은 r,g,b는 각각 255 로 되어 있구나"

하얀색의 red? --> white.red
하얀색의 green? --> white.green
하얀색의 blue ? --> white.blue


2. 네임드 튜플 장점 - 2)

temp = [20, 40]

point4 = Point._make(temp)
print(point4)

결과

Point(x=20, y=40)

_make에 iterable한 매개변수를 입력하여
네임드 튜플의 활용성을 극대화시킬 수도 있다.

0개의 댓글