본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”을 읽고 정리한 내용입니다. 어렵거나 생소한 내용은 ✅ 표시를 해두었다. 반복해서 읽고 체화해나가자!! Chapter 01. Pythonic Thinking # Title Post ...
[Effective Python] 모아보기
[Better Way #54] 스레드에서 데이터 경합을 피하기 위해 Lock을 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 07. Concurrency and Parallelism”을 읽고 정리한 내용입니다. GIL이 동시 접근을 보장해주는 락 역할을 해주는 것처럼 보이지만, 실제로는 그렇지 않다. 파이썬 스레드는 GIL로 인해 한 순간에 단 하나만 실행될 수 있으나, ...
[Better Way #53] 블로킹 I/O의 경우 스레드를 사용하고 병렬성을 피하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 07. Concurrency and Parallelism”을 읽고 정리한 내용입니다. 1. 전역 인터프리터 락(Global Interpreter Lock, GIL) 파이썬의 표준 구현인 CPython은 두 단계를 거쳐 파이썬 프로그램을 실행한다. ...
[Better Way #52] 자식 프로세스를 관리하기 위해 subprocess를 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 07. Concurrency and Parallelism”을 읽고 정리한 내용입니다. 개념 잡기 동시성(concurrency) 컴퓨터가 같은 시간에 여러 다른 작업을 처리하는 것처럼 보이는 것...
[Algorithm] 유클리드 호제법(Euclidean Algorithm): 최대공약수(GCD)와 최소공배수(LCM) 구하기
유클리드 호제법(Euclidean Algorithm) 유클리드 호제법이란, 두 개의 양의 정수에 대해 최대공약수(GCD, greatest common divisor)를 구하는 알고리즘이다. “호제법”이라는 것은 두 수가 서로 상대방 수를 나누어 원하는 수를 얻는 알고리즘을 의미한다. 유클리드 호제법의 내용을 간단히 정리하면 다음과 같다...
[OOP] SOLID 원칙
본문은 “개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴”(최범균 저)을 읽고 정리한 내용입니다. SOLID 원칙이란 객체지향적으로 설계하는 데에 기본이 되는 설계 원칙이다. 각 원칙에 대해 알아보자. 1. 단일 책임 원칙 (Single Responsibility Principle; SRP) 클래스는 단 한 개의 책임을 ...
[Better Way #51] 합성 가능한 클래스 확장이 필요하면 메타클래스보다는 클래스 데코레이터를 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스는 서로 쉽게 합성할 수 없지만 클래스 데코레이터는 여러 개를 충돌 없이 사용할 수 있기 때문에, 클래스를 확장하면서 합성해야 할 때 클래스 데코레이터를 사용...
[Algorithm] Kadane’s Algorithm: 연속 부분 수열의 최대 합 구하기 (+ DP의 Space Complexity 최적화하기)
Maximum Subarray Problem Maximum Subarray Problem이란, 주어진 수열에 대해서 연속 부분 수열의 최대 합을 구하는 문제이다. 예제로 LeetCode 53. Maximum Subarray 문제의 첫 번째 예시를 살펴보면 다음과 같이 수열이 주어진다. 이때 maximum subarray는 노란색으로 하이라이트한 부...
[Python] Sequence에서 홀수 번 등장하는 원소 찾기 (w/ Hash Table)
어떤 sequence에 대해 홀수 번 등장하는 원소를 구하거나, 각 원소의 등장 횟수가 홀수 번인지 짝수 번인지 판단해야 하는 경우가 있다. 가장 나이브하게 생각하면 Counter를 만들고, 각 item을 순회하면서 확인하면 된다. 다른 방법으로는 hash table(Python의 경우, set)을 사용하는 방법이 있다. 간단히 이야기하면...
[Python] Bitwise & 연산을 이용하여 홀수 판단 하기
홀수를 판단하는 기본적인 방법은 2로 나눈 나머지가 1인지 확인하는 것이다. if c % 2 == 1: 이때, 다음과 같이 bitwise & 연산을 사용하면 성능을 optimize 할 수 있다. if c & 1: