color = (55, 155, 255)
--- 중략 ---
print(color[0])
한달 후 이 코드를 봤을때,
color[0]
이 무엇을 염두에 두고 작성한 것인지 파악하기 어려울 수도 있다.
대안으로는 어떤 것이 있을까?
color = {
'red' : 55,
'green' : 155,
'blue' : 255
}
print(color['red'])
가독성이 조금은 좋아보인다.
빨간색, 초록색, 파랑색을 의미함을 알 수 있기 때문이다.
하지만, 유지 보수 측면에서 보면 문제점이 보인다.
새로운 색을 추가할 때마다
key
와 value
를 추가해야만 한다.
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,)
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
temp = [20, 40]
point4 = Point._make(temp)
print(point4)
결과
Point(x=20, y=40)
_make에 iterable한 매개변수를 입력하여
네임드 튜플의 활용성을 극대화시킬 수도 있다.