분야별도서 > 프로그래밍 > 파이썬

분야별도서

Python Cookbook 3판

Python 3를 정복하기 위한 보약 같은 레시피
  • 저자데이비드 비즐리, 브라이언 K. 존스 저 / 정승원 역
  • 발행일2014-02-05
  • 정가38,000원
  • 페이지690 페이지
  • ISBN 978-89-92649-68-1
  • 책소개
  • 저자소개
  • 목차
  • 출판사 서평

파이썬 3로 프로그램을 작성하거나 파이썬 2 코드를 업데이트하고 싶다면 바로 이 책이 필요하다. 실질적으로 도움이 되는 레시피들을 모두 파이썬 3.3으로 작성하고 테스팅했으며, 현대적인 도구에 주목하고자 하는 숙련된 프로그래머들을 위한 책이다.

이 책은 여러 레시피를 통해 파이썬의 핵심 기능과 애플리케이션에서 일반적으로 작업하는 영역을 다룬다. 모든 레시피에는 프로젝트에 바로 가져다 사용할 수 있는 샘플 코드와, 이 코드가 어떻게 동작하는지에 관한 깊이 있는 토론이 담겨 있다.

◆저자소개


데이비드 비즐리(David Beazley)


독립 소프트웨어 개발자이며 과학자, 개발자, 엔지니어를 위한 프로그래밍 수업을 진행한다. 그는 Python Essential Reference(Addison-Wesley)의 저자이고 오픈소스 파이썬 패키지를 여러 개 개발했다.

브라이언 K. 존스(Brian K. Jones)는 프린스턴대학교 컴퓨터공학부의 시스템 관리자이다.




◆역자소개


정승원


LG전자 미디어 연구소를 거쳐, 현재 2K Sports에서 Software Engineer로 일하고 있다.
역서로는 The Python Standard Library by Example(2012), 아이폰 위치 기반 애플리케이션 개발(2013)이 있다.

1. 자료 구조와 알고리즘

1.1 시퀀스를 개별 변수로 나누기

1.2 임의 순환체의 요소 나누기

1.3 마지막 N개 아이템 유지

1.4 N 아이템의 최대 혹은 최소 값 찾기

1.5 우선 순위 큐 구현

1.6 딕셔너리의 키를 여러 값에 매핑하기

1.7 딕셔너리 순서 유지

1.8 딕셔너리 계산

1.9 두 딕셔너리의 유사점 찾기

1.10 순서를 깨지 않고 시퀀스의 중복 없애기

1.11 슬라이스 이름 붙이기

1.12 시퀀스에 가장 많은 아이템 찾기

1.13 일반 키로 딕셔너리 리스트 정렬

1.14 기본 비교 기능 없이 객체 정렬

1.15 필드에 따라 레코드 묶기

1.16 시퀀스 필터링

1.17 딕셔너리의 부분 추출

1.18 시퀀스 요소에 이름 매핑

1.19 데이터를 변환하면서 줄이기

1.20 여러 매핑을 단일 매핑으로 합치기

2. 문자열과 텍스트

2.1 여러 구분자로 문자열 나누기

2.2 문자열 처음이나 마지막에 텍스트 매칭

2.3 쉘 와일드카드 패턴으로 문자열 매칭

2.4 텍스트 패턴 매칭과 검색

2.5 텍스트 검색과 치환

2.6 대소문자를 구별하지 않는 검색과 치환

2.7 가장 짧은 매칭을 위한 정규 표현식

2.8 여러 줄에 걸친 정규 표현식 사용

2.9 유니코드 텍스트 노멀화

2.10 정규 표현식에 유니코드 사용

2.11 문자열에서 문자 잘라내기

2.12 텍스트 정리

2.13 텍스트 정렬

2.14 문자열 합치기

2.15 문자열에 변수 사용

2.16 텍스트 열의 개수 고정

2.17 HTMLXML 엔터티 처리

2.18 텍스트 토큰화

2.19 간단한 재귀 파서 작성

2.20 바이트 문자열에 텍스트 연산 수행

3. 숫자, 날짜, 시간

3.1 반올림

3.2 정확한 10진수 계산

3.3 출력을 위한 숫자 서식화

3.4 2진수, 8진수, 16진수 작업

3.5 바이트에서 큰 숫자를 패킹/언패킹

3.6 복소수 계산

3.7 무한대와 NaN 사용

3.8 분수 계산

3.9 큰 배열 계산

3.10 행렬과 선형 대수 계산

3.11 임의의 요소 뽑기

3.12 시간 단위 변환

3.13 마지막 금요일 날짜 구하기

3.14 현재 달의 날짜 범위 찾기

3.15 문자열을 시간으로 변환

3.16 시간대 관련 날짜 처리

4. 이터레이터와 제너레이터

4.1 수동으로 이터레이터 소비

4.2 델리게이팅 순환

4.3 제너레이터로 새로운 순환 패턴 생성

4.4 이터레이터 프로토콜 구현

4.5 역방향 순환

4.6 추가 상태를 가진 제너레이터 함수 정의

4.7 이터레이터의 일부 얻기

4.8 순환 객체 첫 번째 부분 건너뛰기

4.9 가능한 모든 순열과 조합 순환

4.10 인덱스-값 페어 시퀀스 순환

4.11 여러 시퀀스 동시에 순환

4.12 서로 다른 콘테이너 아이템 순환

4.13 데이터 처리 파이프라인 생성

4.14 중첩 시퀀스 풀기

4.15 정렬된 여러 시퀀스를 병합 후 순환

4.16 무한 while 순환문을 이터레이터로 치환

5. 파일과 입출력

5.1 텍스트 데이터 읽고 쓰기

5.2 파일에 출력

5.3 구별자나 종단 부호 바꾸기

5.4 바이너리 데이터 읽고 쓰기

5.5 존재하지 않는 파일에 쓰기

5.6 문자열에 입출력 작업하기

5.7 압축된 데이터 파일 읽거나 쓰기

5.8 고정 크기 레코드 순환

5.9 바이너리 데이터를 수정 가능한 버퍼에 넣기

5.10 바이너리 파일 메모리 매핑

5.11 경로 다루기

5.12 파일 존재 여부 확인

5.13 디렉터리 리스팅 구하기

5.14 파일 이름 인코딩 우회

5.15 망가진 파일 이름 출력

5.16 이미 열려 있는 파일의 인코딩을 수정하거나 추가하기

5.17 텍스트 파일에 바이트 쓰기

5.18 기존 파일 디스크립터를 파일 객체로 감싸기

5.19 임시 파일과 디렉터리 만들기

5.20 시리얼 포트와 통신

5.21 파이썬 객체를 직렬화하기

6. 데이터 인코딩과 프로세싱

6.1 CSV 데이터 읽기와 쓰기

6.2 JSON 데이터 읽기 쓰기

6.3 단순한 XML 데이터 파싱

6.4 매우 큰 XML 파일 증분 파싱하기

6.5 딕셔너리를 XML로 바꾸기

6.6 XML 파싱, 수정, 저장

6.7 네임스페이스로 XML 문서 파싱

6.8 관계형 데이터베이스 작업

6.9 16진수 인코딩, 디코딩

6.10 Base64 인코딩, 디코딩

6.11 바이너리 배열 구조체 읽고 쓰기

6.12 중첩, 가변 바이너리 구조체 읽기

6.13 데이터 요약과 통계 수행

7. 함수

7.1 매개변수 개수에 구애 받지 않는 함수 작성

7.2 키워드 매개 변수만 받는 함수 작성

7.3 함수 인자에 메타데이터 넣기

7.4 함수에서 여러 값을 반환

7.5 기본 인자를 사용하는 함수 정의

7.6 이름 없는 함수와 인라인 함수 정의

7.7 이름 없는 함수에서 변수 고정

7.8 인자를 N개 받는 함수를 더 적은 인자로 사용

7.9 메소드가 하나인 클래스를 함수로 치환

7.10 콜백 함수에 추가적 상태 넣기

7.11 인라인 콜백 함수

7.12 클로저 내부에서 정의한 변수에 접근

8. 클래스와 객체

8.1 인스턴스의 문자열 표현식 변형

8.2 문자열 서식화 조절

8.3 객체의 콘텍스트 관리 프로토콜 지원

8.4 인스턴스를 많이 생성할 때 메모리 절약

8.5 클래스 이름의 캡슐화

8.6 관리 속성 만들기

8.7 부모 클래스의 메소드 호출

8.8 서브클래스에서 프로퍼티 확장

8.9 새로운 클래스나 인스턴스 속성 만들기

8.10 게으른 계산을 하는 프로퍼티 사용

8.11 자료 구조 초기화 단순화하기

8.12 인터페이스, 추상 베이스 클래스 정의

8.13 데이터 모델 혹은 타입 시스템 구현

8.14 커스텀 콘테이너 구현

8.15 속성 접근 델리게이팅

8.16 클래스에 생성자 여러 개 정의

8.17 init 호출 없이 인스턴스 생성

8.18 믹스인으로 클래스 확장

8.19 상태 객체 혹은 상태 기계 구현

8.20 문자열로 이름이 주어진 객체의 메소드 호출

8.21 비지터 패턴 구현

8.22 재귀 없이 비지터 패턴 구현

8.23 순환 자료 구조에서 메모리 관리

8.24 비교 연산을 지원하는 클래스 만들기

8.25 캐시 인스턴스 생성

9. 메타 프로그래밍

9.1 함수 감싸기

9.2 데코레이터 작성 시 함수 메타데이터 보존

9.3 데코레이터 풀기

9.4 매개변수를 받는 데코레이터 정의

9.5 사용자가 조절 가능한 속성을 가진 데코레이터 정의

9.6 옵션 매개변수를 받는 데코레이터 정의

9.7 데코레이터를 사용해서 함수에서 타입 확인 강제

9.8 데코레이터를 클래스의 일부로 정의

9.9 클래스 데코레이터 정의

9.10 클래스와 스태틱 메소드에 데코레이터 적용

9.11 감싼 함수에 매개변수를 추가하는 데코레이터 작성

9.12 클래스 정의 패치에 데코레이터 사용

9.13 인스턴스 생성 조절에 메타클래스 사용

9.14 클래스 속성 정의 순서 수집

9.15 옵션 매개변수를 받는 메타클래스 정의

9.16 *args, **Kwargs에 매개변수 시그니처 강제

9.17 클래스 코딩 규칙 강제

9.18 클래스를 프로그램적으로 정의

9.19 정의 시 클래스 멤버 초기화

9.20 함수 주석으로 다중 디스패치 구현

9.21 프로퍼티 메소드 중복 피하기

9.22 손쉬운 콘텍스트 매니저 정의

9.23 지역변수 문제 없이 코드 실행

9.24 파이썬 코드 파싱, 분석

9.25 파이썬 바이트 코드 디스어셈블

10. 모듈과 패키지

10.1 모듈의 계층적 패키지 만들기

10.2 일괄 임포트 제어

10.3 상대 경기 패키지 서브모듈 임포트

10.4 모듈을 여러 파일로 나누기

10.5 공통된 네임스페이스에 코드 임포트 디렉터리 만들기

10.6 모듈 리로드

10.7 디렉터리나 Zip 파일을 실행 가능하게 만들기

10.8 패키지의 데이터파일 읽기

10.9 sys.path에 디렉터리 추가

10.10 문자열로 주어진 모듈 이름 임포트

10.11 임포트 후크로 원격 머신에서 모듈 불러오기

10.12 임포트 시 모듈 패치

10.13 개인적인 목적으로 패키지 설치

10.14 새로운 파이썬 환경 생성

10.15 패키지 배포

11. 네트워크와 웹 프로그래밍

11.1 클라이언트로 HTTP 서비스와 통신

11.2 TCP 서버 만들기

11.3 UDP 서버 생성

11.4 CIDR 주소로 IP 주소 생성

11.5 간단한 REST 기반 인터페이스 생성

11.6 XML-RPC로 간단한 원격 프로시저 호출 구현

11.7 인터프리터 간 통신

11.8 원격 프로시저 호출 구현

11.9 간단한 클라이언트 인증

11.10 네트워크 서비스에 SSL 추가

11.11 프로세스 간 소켓 파일 디스크립터 전달

11.12 이벤트 기반 입출력 이해

11.13 큰 배열 보내고 받기

12. 병렬 처리

12.1 스레드 시작과 정지

12.2 스레드가 시작했는지 판단하기

12.3 스레드 간 통신

12.4 임계 영역 락

12.5 락킹으로 데드락 피하기

12.6 특정 스레드용 상태 저장

12.7 스레드 풀 생성

12.8 간단한 병렬 프로그램 수행

12.9 GIL 다루기(그리고 더 이상 걱정하지 않기)

12.10 액터 작업 정의

12.11 메시지 출판/구독 구현

12.12 스레드의 대안으로 제너레이터 사용

12.13 다중 스레드 큐 폴링

12.14 Unix에서 데몬 프로세스 실행

13. 유틸리티 스크립트와 시스템 관리

13.1 리다이렉션, 파이프, 입력 파일을 통한 스크립트 입력 받기

13.2 에러 메시지와 함께 프로그램 종료

13.3 커맨드 라인 옵션 파싱

13.4 암호 입력 받기

13.5 터미널 크기 구하기

13.6 외부 명령을 실행하고 결과 얻기

13.7 파일과 디렉터리 복사와 이동

13.8 압축 파일 생성과 해제

13.9 이름으로 파일 찾기

13.10 환경 설정 파일 읽기

13.11 간단한 스크립트에 로그 추가

13.12 라이브러리에 로그 추가

13.13 스톱워치 타이머 만들기

13.14 메모리와 CPU 사용에 제한 걸기

13.15 웹 브라우저 실행

14. 테스팅, 디버깅, 예외

14.1 stdout으로 보낸 결과물 테스팅

14.2 유닛 테스트에서 객체 패치

14.3 유닛 테스트에서 예외 조건 시험하기

14.4 파일에 테스트 결과 기록

14.5 테스트 실패 예측과 건너뜀

14.6 다중 예외 처리

14.7 모든 예외 캐치

14.8 커스텀 예외 생성

14.9 다른 예외에 대한 응답으로 예외 발생

14.10 마지막 예외 다시 발생

14.11 경고 메시지 생성

14.12 프로그램 크래시 디버깅

14.13 프로파일링과 타이밍

14.14 프로그램 실행 속도 향상

15. C확장

15.1 ctypesC 코드 접근

15.2 간단한 C 확장 모듈 작성

15.3 배열에 동작하는 확장 함수 작성

15.4 C 확장 모듈에서 불투명한 포인터 관리

15.5 확장 모듈에서 C API 정의, 내보내기

15.6 C에서 파이썬 호출

15.7 C 확장에서 GIL 해제

15.8 C와 파이썬에서 스레드 믹싱

15.9 SwigC 코드 감싸기

15.10 C 코드를 Cython으로 감싸기

15.11 Cython으로 성능 좋은 배열 연산 구현

15.12 함수 포인터를 호출 가능하도록 만들기

15.13 C 라이브러리에 NULL로 끝나는 문자열 전달

15.14 C 라이브러리에 Unicode 문자열 전달

15.15 C 문자열의 파이썬 변환

15.16 알 수 없는 인코딩의 C 문자열 다루기

15.17 C 확장 모듈에 파일 이름 전달

15.18 C 확장에 파일 전달

15.19 C에서 파일 같은 객체 읽기

15.20 C에서 순환 객체 소비

15.21 세그멘테이션 오류 진단

부록 A 참고자료

찾아보기

이 책은 그야말로 보물창고와 같다. 파이썬에 대해 어느 정도 알고 있고 어떤 부분이 아쉽다, 궁금하다 했던 독자들은 각 챕터별로 차려진 수많은 레시피들에 분명 만족할 것이다. 대부분의 레시피(자료들)는 라이브러리, 프레임워크, 애플리케이션에서 사용하는 고급 기술들이다. 이러한 기술들을 찬찬히 읽고 내 것으로 가져간다면 파이썬이 실제로 어떻게 동작하는지에 대해 통찰력을 가질 수 있을 것이다. 이 책을 통해 배운 내용은 앞으로 작성할 코드에 많은 도움이 되리라 확신한다.