- [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
- [분산 컴퓨팅] CAP과 FLP 정리31514CAP네트워크 문제로 인해 분산된 장치에 두 가지 문제가 발생할 수 있다.일관성 문제 - 두 개의 분산된 장치가 일관되지 않은 정보를 제공하는 문제가용성 문제 - 동일한 정보를 제공하기 위해 처리 속도가 느려지는 문제 CAP 정리는 네트워크 단절로부터 회복이 이루어지는 상태에서 서로 다른 분산 장치들이 위의 두 조건을 동시에 충족할 수 없음을 증명한 이론이다.따라서 분산 컴퓨팅의 용도에 따라 궁극적 일관성(가용성 우선) 또는 강한 일관성(일관성 우선) 중 선택할 필요가 있다. 여기서 말하는 궁극적 일관성과 강한 일관성을 쉽게 설명하면 다음과 같다.궁극적 일관성 - 시간이 지나면 결국 모든 노드가 같은 데이터를 갖게 된다는 것을 보장하기 때문에 일단 사용자에게 데이터를 제공한다.강한 일관성 - 모든 사용자..
- 2024-10-29 14:09:11
- [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
- [분산 컴퓨팅] 3장 - 이중화된 데이터베이스 문제31514개요데이터베이스 장애 대비를 위해 다른 지역에 복제본을 생성했다고 가정해보자. 이 경우 두 데이터베이스 사이의 동기화 문제를 해결하는 방법 중 하나로 이벤트가 발생한 시간을 기준으로 처리 순서를 결정하는 방식을 떠올릴 수 있다. 하지만 분산된 노드들은 정확히 동일한 시간을 가리키고 있지 않기 때문에, 물리적 시계를 기준으로 이벤트의 순서를 결정하면 문제가 발생할 수 있다. 이를 위해 우리는 크리스티안 알고리즘, 버클리 알고리즘, NTP(네트워크 시간 프로토콜)과 같은 방법을 사용하여 네트워크 통신 지연을 고려한 시간 동기화를 시도한다. 이 기법들은 시간 동기화의 정확도를 높여주지만, 나노초 단위의 완벽한 동기화는 여전히 보장되지 않는다. 따라서 정확한 물리적 시각을 사용하는 대신, Lamport Cloc..
- 2024-10-28 12:26:48
- [분산 컴퓨팅] 2장 - 중계자와 2단계 커밋 프로토콜31514분산 컴퓨팅 장치들 간의 거래 행위를 트랜잭션이라고 한다.트랜잭션이 원자성을 가지고 있다면 분산 컴퓨팅 장치들이 모두 확약하지 않는 이상 특정 작업을 이행하지 않는다. 트랜잭션의 원자성을 위하여 2단계 커밋 프로토콜(2PC 프로토콜)을 사용할 수 있다.2PC 프로토콜에 참여한 프로세스들은 각자의 디스크에 로그(log)를 먼저 기록하고 작업을 이행한다.그리고 장애가 발생하면 로그를 참조하거나 다른 프로세스와 통신하여 대응한다. 이를 통해 시스템의 안정성과 라이브니스를 충족할 수 있다.안정성(Safety) - 잘못된 결과가 일어나서는 안 되는 원칙라이브니스(Liveness) - 원하는 결과가 반드시 어느 시점에서는 실현되어야 하는 원칙
- 2024-10-25 14:14:55
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)