파이썬 내장 딕셔너리 타입을 사용하면 객체의 생명 주기 동안 동적인 내부 상태를 잘 유지할 수 있다.여기서 동적이라는 말은 어떤 값이 들어올지 미리 알 수 없는 식별자를 유지해야한다는 뜻아래는 학생 별 성적을 리스트로 추가하는 코드 예시이다.class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._grades[name].append(score) def average_grade(self, name): grades =..
itertools 메서드와 유용한 함수 소개itertools는 반복 가능한 객체를 다루는 데 유용한 함수들을 제공하는 파이썬 표준 라이브러리이다. 아래는 주요 메서드와 그 기능을 설명한 내용이다.코딩테스트 쓸만해 보이는 함수에는 체크했다. ✔1. itertools.chain여러 iterable을 하나로 이어 붙이는 기능을 한다.예제: it = itertools.chain([1, 2, 3], [4, 5, 6]) print(list(it)) # [1, 2, 3, 4, 5, 6]2. itertools.repeat ✔특정 값을 반복해서 생성한다. 반복 횟수를 지정할 수 있다.예제: it = itertools.repeat('안녕', 3) print(list(it)) # ['안녕', '안녕', '안녕']..
제네레이터와 리스트 컴프리헨션리스트 컴프리헨션다른 챕터에서도 언급했듯이 리스트 컴프리헨션은 메모리에 데이터를 생성하는 순간 로드 시킨다.value = [len(x) for x in open('my_file.txt')]print(value)제네레이터제네레이터는 이터레이터를 생성하여 값을 한 번에 하나씩만 로드한다.it = [100, 200, 300]roots = ((x, x**0.5) for x in it)print(next(roots)) # (100 10.0)다중 제네레이터를 통한 기능 구현아래는 화면의 이미지를 움직이게 하는 그래픽 프로그램의 예시이다.해당 코드의 문제점은 for 와 yield 의 반복으로 시각적인 잡음이 많다는 것이다.def move(period, speed): for _ in ..
제네레이터의 문제 상황아래와 같이 도시 별 전체 여행자 수 중의 비율 확인하는 함수가 있다고 가정하자def normalize(numbers): total = sum(numbers) result = [] for value in numbers: percent = 100 * value / total result.append(percent) return resultvisits = [15, 35, 80]percentages = normalize(visits)print(percentages) # [11.53434, 26.76767, 61.53434]확장성을 위해 여행자 정보가 들어있는 파일을 읽는다고 가정하자아래의 로직에서는 결과적으로 빈 리스트를 리턴하게 된다.이터레..
제네레이터 (Generator ) 란 ?이터레이터 (Iterator)를 생성하는 특별한 함수 또는 표현식이다.하나씩 생성하여 반환하며, 호출할 때마다 이전 상태를 유지한다.이로 인해서 메모리에서 효율적으로 처리하기 때문에 대용량 데이터 처리에 유리하다.제네레이터 예시일반 함수 예시def index_words(text): result = [] if text: result.append(0) for index, letter in enumerate(text): if letter == ' ': result.append(index + 1) return resultaddress = '컴퓨터(영어: Computer, 문화어: 콤퓨터, 순화어:전산기)는 ..
데코레이터란 자신이 감싸고 있는 함수가 호출되기 전과 후에 코드를 추가로 실행해주는 기능인자값과 반환값을 출력하는 데코레이터 예시def trace(func): def wrapper(*args, **kwargs): result = func(*args, **kwargs) print(f'{func.__name__}({args!r}, {kwargs!r}) 'f'-> {result!r}') return result return wrapper@tracedef fibonacci(n): """Return n 번째 피보나치 수""" if n in (0, 1): return n return (fibonacci(n - 2) + fibonacci(n..
숫자로 이뤄진 list를 정렬하되, 정렬한 리스트의 앞쪽에는 우선 순위를 부여한 몇몇 숫자를 기준으로 위치시킨다고 가정하자.def sort_priority(values, group): def helper(x): if x in group: return (0, x) return (1, x) values.sort(key=helper)numbers = [8, 3, 1, 2, 5, 4, 7, 6]group = {2, 3, 5, 7}sort_priority(numbers, group)print(numbers) # [2, 3, 5, 7, 1, 4, 6, 8]영역과 관련 함수 주요 개념파이썬 클로저 를 지원클로저란 자신이 정의된 영역 밖의 변수를 참조하는 함수다...
python 3.5python 3.5 이전에는 딕셔너리에 대해 이터레이션을 수행하면 키를 임의의 순서로 돌려줬으며, 이터레이션 순서는 원소가 삽입된 순서와 일치하지 않았다.이런 현상은 예전의 딕셔너리 구현이 내장 hash 함수와 seed를 사용하는 해시테이블 알고리즘으로 만들어졌기 때문이다.python 3.6 ~python 3.6부터는 삽입 순서를 보존하도록 동작이 개선됐다.**kwargs 순서함수에 대한 키워드 인자는 예전에는 순서가 뒤죽박죽이었고, 그로 인해 함수 호출을 디버깅 하기 힘들었다.def my_func(**kwargs): for key, value in kwargs.items(): print(f'{key} = {value}')my_func(goose='gosling', k..
sort 기본list 내장 타입에는 리스트이 원소를 여러 기준에 따라 정렬할 수 있는 sort 메서드가 들어 있다.예를 들어 다음 코드는 정수 리스트를 작은 수부터 큰 수까지 순서대로 정렬한다.numbers = [93, 86, 11, 68, 70]numbers.sort()print(numbers) # [11,68,70,86,93]sort 메서드는 순서를 정할 수 있는 대부분의 내장타입(문자열, 부동소수점 등) 에 잘 작동한다.다음 예시는 건설 현장에서 사용하는 여러 도구를 표현하는 클래스의 인스턴스를 출력할 수 있는 __repr__ 메서드와 함께 사용한다.class Tool: def __init__(self, name, weight): self.name = name self..
언패킹 기본기본 언패킹의 한계점은 언패킹할 시퀀스의 길이를 미리 알고 있어야 한다는 것이다.아래와 같이 언패킹을 시도할 경우 에러가 발생할 것이다.car_ages = [0, 9, 4, 8, 7, 20, 19, 1, 6, 15]car_ages_descending = sorted(car_ages, reverse=True)oldest, second_oldest = car_ages_descending물론 이를 해결하기 위해 슬라이싱 방식을 사용하기도 한다.이 방식도 부분적으로 배열 길이로 인해 인덱스 예외가 발생할 수 있다.oldest = car_ages_descending[0]second_oldest = car_ages_descending[1]others = car_ages_descending[2:]print..