가지 주요 요점
1. 파이썬의 함수는 일급 객체입니다
함수는 객체입니다—변수에 할당되거나 데이터 구조에 저장되며, 다른 함수에 전달되거나 반환될 수 있습니다.
데이터로서의 함수. 파이썬에서는 함수가 일급 시민으로 취급되며, 이는 다른 객체처럼 조작될 수 있음을 의미합니다. 이러한 특성은 강력한 프로그래밍 패러다임을 가능하게 합니다:
- 함수를 변수에 할당
- 함수를 리스트, 딕셔너리 또는 다른 데이터 구조에 저장
- 함수를 다른 함수의 인수로 전달
- 함수를 다른 함수에서 반환
- 다른 함수 내부에 함수를 정의 (중첩 함수)
이러한 유연성은 고차 함수, 클로저 및 함수형 프로그래밍 패턴과 같은 고급 프로그래밍 기술을 가능하게 하여 파이썬을 복잡한 문제 해결에 있어 다재다능하고 표현력 있는 언어로 만듭니다.
2. 데코레이터는 함수의 동작을 향상시키고 수정합니다
데코레이터는 호출 가능한 객체의 동작을 영구적으로 수정하지 않고 수정할 수 있는 재사용 가능한 빌딩 블록을 정의합니다.
수정의 문법적 설탕. 데코레이터는 함수나 클래스의 동작을 확장하거나 수정하는 깨끗하고 재사용 가능한 방법을 제공합니다:
- 함수의 소스 코드를 변경하지 않고 함수의 동작을 수정
- 일반적인 사용 사례로는 로깅, 타이밍, 접근 제어 및 캐싱이 포함됨
- 데코레이터는 중첩될 수 있어 단일 함수에 여러 수정을 적용 가능
- 코드 모듈화를 유지하며 관심사의 분리를 촉진
데코레이터는 @
문법을 사용하여 구현되며, 이는 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다. 데코레이터는 파이썬의 일급 함수와 클로저를 활용하여 메타 프로그래밍을 위한 강력한 메커니즘을 제공합니다.
3. *args와 **kwargs는 유연한 함수 인수를 가능하게 합니다
*args와 **kwargs는 파이썬에서 가변 인수를 사용하는 함수를 작성할 수 있게 합니다.
가변 인수의 유연성. 이러한 특수 문법 요소는 함수가 임의의 수의 위치 인수 또는 키워드 인수를 수락할 수 있게 합니다:
*args
는 추가 위치 인수를 튜플로 수집**kwargs
는 추가 키워드 인수를 딕셔너리로 수집- 함수 정의의 유연성을 제공하여 향후 확장을 가능하게 함
- 선택적 매개변수를 가진 래퍼 함수나 API를 작성하는 데 유용
이 기능은 보다 범용적인 함수를 작성할 수 있게 하며, 함수 시그니처를 수정하지 않고도 변경되는 요구 사항에 적응할 수 있는 코드를 작성하는 데 도움이 됩니다.
4. 컴프리헨션은 컬렉션 생성을 위한 간결한 문법을 제공합니다
컴프리헨션은 단순한 for-루프 패턴을 위한 멋진 문법적 설탕입니다.
우아한 컬렉션 생성. 리스트, 세트 및 딕셔너리 컴프리헨션은 기존의 반복 가능한 객체를 기반으로 컬렉션을 생성하는 간결한 방법을 제공합니다:
- 컬렉션의 생성과 채우기를 한 줄로 결합
- 동등한 for 루프보다 더 읽기 쉽고 빠름
- 요소를 필터링하기 위한 조건 포함 가능
- 리스트, 세트 및 딕셔너리에 사용 가능
예시:
- 리스트 컴프리헨션:
[x*2 for x in range(10) if x % 2 == 0]
- 세트 컴프리헨션:
{word.lower() for word in words}
- 딕셔너리 컴프리헨션:
{k: v**2 for k, v in my_dict.items()}
강력하지만, 지나치게 복잡한 컴프리헨션은 코드의 의도를 흐리게 할 수 있으므로 간결함과 가독성의 균형을 유지하는 것이 중요합니다.
5. 제너레이터 함수와 표현식은 반복자 생성을 단순화합니다
제너레이터는 클래스 기반 반복자를 작성할 때 필요한 많은 보일러플레이트 코드를 추상화합니다.
수월한 반복. 제너레이터는 전체 클래스 구현 없이 반복자를 생성하는 간단한 방법을 제공합니다:
yield
키워드를 사용하여 일련의 값을 생성- 메모리 효율적이며, 값을 즉시 생성
- for 루프, 리스트 컴프리헨션 및 기타 반복 가능한 컨텍스트에서 사용 가능
- 제너레이터 표현식은 간단한 제너레이터를 위한 간결한 문법 제공
제너레이터 함수:
def countdown(n):
while n > 0:
yield n
n -= 1
제너레이터 표현식:
squares = (x*x for x in range(10))
제너레이터는 큰 데이터셋이나 무한 시퀀스를 다룰 때 특히 유용하며, 모든 값을 한 번에 메모리에 저장하지 않습니다.
6. 딕셔너리는 다재다능하고 강력한 데이터 구조입니다
딕셔너리는 파이썬의 중심 데이터 구조입니다.
효율적인 키-값 저장. 딕셔너리는 빠르고 유연하며 기능이 풍부한 연관 배열을 제공합니다:
- 키 조회, 삽입 및 삭제에 대한 평균 시간 복잡도 O(1)
- 문자열, 숫자, 튜플과 같은 해시 가능한 객체를 키로 지원
- 안전한 키 접근을 위한
get()
메서드 제공 - 다른 언어의 switch/case 문을 에뮬레이트하는 데 사용 가능
고급 딕셔너리 기능:
- OrderedDict: 삽입된 키의 순서를 기억
- defaultdict: 누락된 키에 대한 기본값 제공
- ChainMap: 여러 딕셔너리를 단일 매핑으로 검색
딕셔너리는 파이썬의 구현에 기본적이며, 많은 파이썬 라이브러리와 프레임워크에서 광범위하게 사용됩니다.
7. 효과적인 반복 기술은 코드 가독성을 향상시킵니다
파이썬에서 C 스타일의 루프를 작성하는 것은 비파이썬적입니다.
파이썬식 반복. 파이썬은 시퀀스를 반복하고 반복을 수행하는 여러 관용적인 방법을 제공합니다:
- 인덱싱 대신
for item in iterable
사용 - 인덱스와 값을 모두 필요로 할 때
enumerate()
사용 - 여러 시퀀스를 동시에 반복할 때
zip()
사용 - 복잡한 반복을 위해
itertools
모듈 활용
예시:
# 대신에:
for i in range(len(items)):
print(i, items[i])
# 사용:
for i, item in enumerate(items):
print(i, item)
# 두 리스트를 반복:
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
이러한 기술은 더 간결하고 읽기 쉽고 효율적인 코드를 작성하게 하며, 파이썬의 명확성과 단순성 철학에 부합합니다.
8. 객체 지향 프로그래밍 개념은 코드 조직을 최적화합니다
추상 기본 클래스(ABCs)는 파생 클래스가 기본 클래스의 특정 메서드를 구현하도록 보장합니다.
구조화된 코드 설계. 파이썬의 객체 지향 기능은 코드를 조직하고 구조화하는 강력한 도구를 제공합니다:
- 클래스는 데이터와 동작을 캡슐화
- 상속은 코드 재사용과 특수화를 허용
- 추상 기본 클래스는 인터페이스를 정의하고 구현을 강제
- 속성은 속성에 대한 제어된 접근을 제공
- 특수 메서드(던더 메서드)는 객체 동작의 사용자 정의를 허용
파이썬의 주요 OOP 개념:
- 덕 타이핑을 통한 다형성
- 다중 상속 및 메서드 해결 순서(MRO)
- 상속의 대안으로서의 구성
- 고급 클래스 생성 제어를 위한 메타클래스
OOP 원칙을 효과적으로 사용하면 더 유지보수 가능하고 확장 가능하며 모듈화된 코드 구조를 만들 수 있습니다.
9. 파이썬의 데이터 구조는 다양한 기능을 제공합니다
병렬 처리 지원을 찾고 있지 않다면, collections.deque가 제공하는 구현은 파이썬에서 FIFO 큐 데이터 구조를 구현하는 데 훌륭한 기본 선택입니다.
맞춤형 데이터 조직. 파이썬은 다양한 요구에 맞는 풍부한 내장 및 표준 라이브러리 데이터 구조를 제공합니다:
- 리스트: 일반적인 시퀀스를 위한 동적 배열
- 튜플: 고정된 컬렉션을 위한 불변 시퀀스
- 세트: 고유한 요소의 무순서 컬렉션
- 데크: 양쪽 끝에서 효율적인 삽입/삭제를 위한 이중 끝 큐
- Heapq: 우선순위 큐 구현
- Counter: 해시 가능한 객체를 세는 멀티셋
올바른 데이터 구조를 선택하면 코드의 성능과 명확성에 큰 영향을 미칠 수 있습니다. 다음과 같은 요소를 고려하십시오:
- 필요한 작업(예: 빈번한 삽입, 삭제, 조회)
- 메모리 사용량
- 스레드 안전 요구 사항
- 정렬 또는 정렬 필요성
다양한 데이터 구조의 특성과 트레이드오프를 이해하면 프로그래밍 문제에 대한 더 효율적이고 우아한 솔루션을 만들 수 있습니다.
10. 효율적인 문자열 포맷팅은 코드 명확성을 향상시킵니다
포맷 문자열이 사용자 제공인 경우 보안 문제를 피하기 위해 템플릿 문자열을 사용하십시오. 그렇지 않으면 Python 3.6+를 사용하는 경우 리터럴 문자열 보간을 사용하고, 그렇지 않은 경우 "새 스타일" 문자열 포맷팅을 사용하십시오.
명확하고 안전한 문자열 구성. 파이썬은 각기 다른 강점을 가진 여러 문자열 포맷팅 방법을 제공합니다:
- %-포맷팅: 구식이지만 여전히 널리 사용됨
- str.format(): 더 읽기 쉽고 유연함
- f-문자열: 간결하고 강력하며, Python 3.6+에서 사용 가능
- 템플릿 문자열: 사용자 제공 포맷에 더 안전
f-문자열 예시:
name = "Alice"
age = 30
print(f"{name} is {age} years old")
사용자 입력을 위한 템플릿 문자열:
from string import Template
user_input = Template("Hello, $name!")
print(user_input.substitute(name="Bob"))
적절한 문자열 포맷팅 방법을 선택하면 코드의 가독성, 유지보수성 및 보안이 향상되며, 특히 사용자 제공 데이터나 복잡한 문자열 구성을 다룰 때 유용합니다.
마지막 업데이트 날짜:
리뷰
Python Tricks는 중급 및 고급 파이썬 주제를 간결하면서도 통찰력 있게 다루는 것으로 높은 평가를 받고 있다. 독자들은 실용적인 팁, 명확한 설명, 그리고 모범 사례에 대한 집중을 높이 평가한다. 많은 이들이 이 책을 통해 지식의 빈틈을 메우고 코딩 실력을 향상시키는 데 도움이 되었다고 말한다. 책의 대화체 톤과 체계적인 구조는 접근성을 높이고 읽는 재미를 더해준다. 일부 경험 많은 개발자들은 도전적이지 않다고 느꼈지만, 대부분은 파이썬 전문 지식을 심화하고 더 관용적인 코드를 작성하려는 사람들에게 훌륭한 자원이라고 동의한다.