Victoree's Blog

[1] 파이썬 데이터 모델 본문

Python/Fluent Python

[1] 파이썬 데이터 모델

victoree 2023. 6. 10. 16:48
728x90

파이썬의 최고 장점 중 하나는 일관성이다. 파이썬으로 어느 정도 작업을 해본 이후에는 새로운 기능을 구현할 때에도 어느정도 예측이 가능하다. 다른 객체 지향 언어에서는 collection.len() 의 방식으로 함수를 사용하지만, 파이썬에서는 len(collection)이라고 사용하는 것이 크게 이상하지 않다. 

챕터 1에서는 Pythonic(파이썬스러움)과 파이썬 데이터 모델에 대해 설명한다.

1. 아래는 collection 라이브러리를 이용해 Card 클래스를 정의한 코드이다. 

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

실제 업무에서 작업할때는 위 라이브러리를 거의 사용해본 적이 없는 것 같다. 알고리즘 문제 풀이를 할 때, 잘 사용하면 코드를 간결하게 하는데 좋을 것 같다. 

2. 여러 특별메소드(매직메소드라고 부르기도 하고, 던더메소드라고 부르기도 한다)에 대해 정리해보자.

일반적으로 사용자는 특별 메소드를 호출할 일이 거의 없고, 보통 내장함수를 호출하는 것이 더 낫다. 예외적으로 __init__ 함수의 경우, 사용자가 구현한 init 함수 내부에서 super class의 init을 호출하는 경우가 있을 수 있다. 

  • __contains__() : 해당 함수가 구현되어 있지 않다면, in 연산자는 순차 검색을 수행한다
  • __repr__()
    • 공식적인 문자열을 반환한다. 문자열로 객체를 다시 사용할 목적으로 사용한다.
    • repr함수 기반으로 생성된 객체는 이전 객체로 되돌리는 것이 가능하다.

3. 정렬

아래와 가티 spades_high 라는 함수를 하나 정의하고 sorted 함수의 key값으로 해당 함수를 넘겨주면, 그 함수를 기반으로 정렬을 수행할 수 있다. 

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)

def spades_high(card):
	rank_value = FrenchDeck.ranks.index(card.rank)
    return rank_value * len(suit_values) + suit_values[card.suit]
    
for card in sorted(deck, key=spades_high):
	print(card)

 

728x90
Comments