- [BW 37] 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라31514클래스와 상속을 사용하는 방법을 잘 알아두면 유지 보수하기 쉬운 코드를 작성할 수 있다. 파이썬 내장 딕셔너리 타입을 사용하면 객체의 생명 주기 동안 동적인 내부 상태를 잘 유지할 수 있다.동적이라는 말은 어떤 값이 들어올지 미리 알 수 없는 식별자들을 유지해야 한다는 뜻이다.예를 들어 학생들의 점수를 기록해야 하는데, 이름은 미리 알 수 없는 상황이라고 하자.class SimpleGradeBook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._..
- 2024-11-11 11:20:24
- [BW 33] yield from을 사용해 여러 제너레이터를 합성하라31514다음은 제너레이터를 사용해 화면의 이미지를 움직이게 하는 그래픽 프로그램 예제이다.처음에는 이미지가 빠르게 이동하고, 잠시 멈춘 다음, 다시 이미지가 느리게 이동한다.def move(period, speed): for _ in range(period): yield speeddef pause(delay): for _ in range(delay): yield 0def animate(): for delta in move(4, 5.0): yield delta for delta in pause(3): yield delta for delta in move(2, 3.0): yield deltadef render(delta): ..
- 2024-11-08 10:52:39
- [BW 32] 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라31514리스트 컴프리헨션의 입력이 커지면 메모리를 상당히 많이 사용하고, 그로 인해 프로그램이 중단될 수 있다. 이 문제를 해결하기 위해 파이썬은 제네레이터 식을 제공한다.제네레이터 식을 실행해도 출력 시퀀스 전체가 실체화되지 않고, 이터레이터가 생성된다.it = (len(x) for x in open('my_file.txt')) 두 제네레이터 식을 합성할 수도 있다.roots = ((x, x ** 0.5) for x in it) 다만 제네레이터가 반환하는 이터레이터에는 상태가 있기 때문에 한 번만 사용해야 한다.
- 2024-11-01 16:10:28
- [BW 31] 인자에 대해 이터레이션할 때는 방어적이 돼라31514입력 전체의 합계를 내고 각 원소를 나누는 정규화 함수가 있다고 하자.def normalize(numbers): total = sum(numbers) result = [] for v in numbers: percent = 100 * v / total result.append(percent) return result 이 함수에 데이터가 들어 있는 리스트를 입력하면 잘 작동한다.visits = [15, 35, 80]percetages = normalize(visits)print(percetages)>>>[11.538461538461538, 26.923076923076923, 61.53846153846154] 코드의 확장성을 높이기 위해 데이터를 파일에서 읽어온다..
- 2024-10-31 11:01:23
- [BW 30] 리스트를 반환하기보다는 제너레이터를 사용하라31514리스트에 결과를 추가하고 반환하는 코드는 잡음이 많고, 모든 결과를 리스트에 다 저장해야 하므로 메모리를 많이 소진한다.def index_words(text): result = [] if text: result.append(0) for index, letter in enumerate(text): if letter == ' ': result.append(index + 1) return resultaddress = '서울특별시 양천구 목동동로 12길 60'result = index_words(address)print(result)>>>[0, 6, 10, 15, 19] 제네레이터를 사용하면 함수 내부에서 리스트와 상호작용하는 코드가 사라지므로 ..
- 2024-10-30 10:52:19
- [BW 29] 대입식을 사용해 컴프리헨션 안에서 반복 작업을 피하라31514회사에서 주문을 관리하기 위한 프로그램을 작성한다고 하자.고객의 주문 요청이 재고 수량을 넘지 않아야 한다.stock = { '못': 125, '나사못': 35, '나비너트': 8, '와셔': 24,}order = ['나사못', '나비너트', '클립']def get_batches(count, size): return count // sizeresult = {}for name in order: count = stock.get(name, 0) batches = get_batches(count, 8) if batches: result[name] = batchesprint(result)>>>{'나사못': 4, '나비너트': 1} 위 코드를 컴프리헨션으로 바..
- 2024-10-29 14:41:32
- [BW 28] 컴프리헨션 내부에 제어 하위 식을 세 개 이상 사용하지 말라31514컴프리헨션은 루프를 여러 수준으로 내포하도록 허용한다.예를 들어 리스트 안에 리스트가 들어 있는 형태로 정의한 행렬을 단일 리스트로 단순화하는 예제를 살펴보자.matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]flat = [x for row in matrix for x in row]print(flat)>>>[1, 2, 3, 4, 5, 6, 7, 8, 9] 또한, 컴프리헨션에서 다중 루프를 사용하는 예를 살펴보자.matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]squared = [[x ** 2 for x in row] for row in matrix]print(squared)>>>[[1, 4, 9], [16, 25, 36], [49, 64, 81]] 하지..
- 2024-10-28 12:58:42
- [BW 27] map과 filter 대신 컴프리헨션을 사용하라31514파이썬에서는 컴프리헨션을 사용해 리스트, 딕셔너리, 집합 등을 간결하게 생성할 수 있다.a = [1, 2, 3]li = [x ** 2 for x in a]dic = {x: x ** 2 for x in a}s = {x ** 2 for x in a}print(li)print(dic)print(s)>>>[1, 4, 9]{1: 1, 2: 4, 3: 9}{1, 4, 9}
- 2024-10-28 12:48:26
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)