일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Fast API
- Kubernetes
- fluent python
- BAEKJOON
- function
- docker
- AWS
- dockerfile
- Python
- Thread
- Container
- IMAGE
- guru
- 파이썬
- 백준
- 이더리움
- BlockChain
- RabbitMQ
- 플랫폼
- rust
- 블록체인
- Refactoring
- Network
- Algorithm
- 전문가를 위한 파이썬
- 코어 이더리움 프로그래밍
- 동시성
- Ethereum
- 알고리즘
- 러스트
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[1] 파이썬 데이터 모델 본문
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
'Python > Fluent Python' 카테고리의 다른 글
[6] 제어흐름 - 코루틴 (0) | 2023.06.22 |
---|---|
[5] 제어흐름 - 반복형, 반복자, 제너레이터 (0) | 2023.06.22 |
[4] 객체로서의 함수 - 일급 함수와 고위함수, 데코레이터와 클로저 (0) | 2023.06.20 |
[3] 데이터 구조체 - 딕셔너리와 집합, 카운터 (0) | 2023.06.15 |
[2] 데이터 구조체 - 시퀀스, 튜플, 정렬 (0) | 2023.06.15 |
Comments