# 파이썬 자습서

파이썬은 배우기 쉬우면서도 강력한 프로그래밍 언어입니다. 효율적인 자료 구조와 객체 지향 프로그래밍에 대한 간단하고도 효과적인 접근법을 제공합니다. 파이썬은 우아한 문법과 동적 타이핑(typing)을 지원하는 인터프리터 언어로서, 대부분 플랫폼과 다양한 문제 영역에서 스크립트 작성과 빠른 응용 프로그램 개발에 이상적인 환경을 제공합니다.

The Python interpreter and the extensive standard library are freely available in source or binary form for all major platforms from the Python web site, https://www.python.org/, and may be freely distributed. The same site also contains distributions of and pointers to many free third party Python modules, programs and tools, and additional documentation.

파이썬 인터프리터는 C 나 C++ (또는 C에서 호출 가능한 다른 언어들)로 구현된 새 함수나 자료 구조를 쉽게 추가할 수 있습니다. 파이썬은 고객화 가능한 응용 프로그램을 위한 확장 언어로도 적합합니다.

이 학습서는 파이썬 언어와 시스템의 기본 개념과 기능들을 격식 없이 소개합니다. 파이썬 인터프리터를 직접 만져볼 수 있도록 돕지만, 모든 예제가 독립적이기 때문에 오프라인에서 읽기에도 적합합니다.

표준 객체들과 모듈들에 대한 설명은 파이썬 표준 라이브러리 를 보세요. 파이썬 언어 레퍼런스 는 언어에 대한 좀 더 형식적인 정의를 제공합니다. C 나 C++ 로 확장하려면 파이썬 인터프리터 확장 및 내장 와 파이썬/C API 레퍼런스 설명서 를 읽으세요. 파이썬을 깊이 있게 다룬 책들도 많습니다.

이 자습서는 포괄적이려고 시도하지 않습니다. 모든 기능을 다루지는 않는데, 심지어 자주 사용되는 기능조차도 그렇습니다. 대신에, 파이썬의 가장 주목할만한 기능들을 소개하고, 언어의 맛과 스타일에 대한 전체적인 인상을 제공합니다. 이 학습서를 읽은 후에는 파이썬 모듈과 프로그램을 작성할 수 있고, 파이썬 표준 라이브러리 에 기술된 다양한 파이썬 라이브러리 모듈들에 대해 학습할 수 있는 준비가 될 것입니다.

용어집 또한 훑어볼 만한 가치가 있습니다.

- 1. 입맛 돋우기
- 2. 파이썬 인터프리터 사용하기
  - 2.1. 인터프리터 실행하기
    - 2.1.1. 인자 전달
    - 2.1.2. 대화형 모드
  - 2.2. 인터프리터와 환경
    - 2.2.1. 소스 코드 인코딩
- 3. 파이썬의 간략한 소개
  - 3.1. 파이썬을 계산기로 사용하기
    - 3.1.1. 숫자
    - 3.1.2. Text
    - 3.1.3. 리스트
  - 3.2. 프로그래밍으로의 첫걸음
- 4. 기타 제어 흐름 도구
  - 4.1. `if` 문
  - 4.2. `for` 문
  - 4.3. `range()` 함수
  - 4.4. 루프의 `break` 와 `continue` 문, 그리고 `else` 절
  - 4.5. `pass` 문
  - 4.6. `match` Statements
  - 4.7. 함수 정의하기
  - 4.8. 함수 정의 더 보기
    - 4.8.1. 기본 인자 값
    - 4.8.2. 키워드 인자
    - 4.8.3. 특수 매개 변수
      - 4.8.3.1. 위치-키워드(Positional-or-Keyword) 인자
      - 4.8.3.2. 위치 전용 매개 변수
      - 4.8.3.3. 키워드 전용 인자
      - 4.8.3.4. 함수 예제
      - 4.8.3.5. 복습
    - 4.8.4. 임의의 인자 목록
    - 4.8.5. 인자 목록 언 패킹
    - 4.8.6. 람다 표현식
    - 4.8.7. 도큐멘테이션 문자열
    - 4.8.8. 함수 어노테이션
  - 4.9. 막간극: 코딩 스타일
- 5. 자료 구조
  - 5.1. 리스트 더 보기
    - 5.1.1. 리스트를 스택으로 사용하기
    - 5.1.2. 리스트를 큐로 사용하기
    - 5.1.3. 리스트 컴프리헨션
    - 5.1.4. 중첩된 리스트 컴프리헨션
  - 5.2. `del` 문
  - 5.3. 튜플과 시퀀스
  - 5.4. 집합
  - 5.5. 딕셔너리
  - 5.6. 루프 테크닉
  - 5.7. 조건 더 보기
  - 5.8. 시퀀스와 다른 형들을 비교하기
- 6. 모듈
  - 6.1. 모듈 더 보기
    - 6.1.1. 모듈을 스크립트로 실행하기
    - 6.1.2. 모듈 검색 경로
    - 6.1.3. “컴파일된” 파이썬 파일
  - 6.2. 표준 모듈들
  - 6.3. `dir()` 함수
  - 6.4. 패키지
    - 6.4.1. 패키지에서 * 임포트 하기
    - 6.4.2. 패키지 내부 간의 참조
    - 6.4.3. 여러 디렉터리에 있는 패키지
- 7. 입력과 출력
  - 7.1. 장식적인 출력 포매팅
    - 7.1.1. 포맷 문자열 리터럴
    - 7.1.2. 문자열 format() 메서드
    - 7.1.3. 수동 문자열 포매팅
    - 7.1.4. 예전의 문자열 포매팅
  - 7.2. 파일을 읽고 쓰기
    - 7.2.1. 파일 객체의 매소드
    - 7.2.2. `json` 으로 구조적인 데이터를 저장하기
- 8. 에러와 예외
  - 8.1. 문법 에러
  - 8.2. 예외
  - 8.3. 예외 처리하기
  - 8.4. 예외 일으키기
  - 8.5. 예외 연쇄
  - 8.6. 사용자 정의 예외
  - 8.7. 뒷정리 동작 정의하기
  - 8.8. 미리 정의된 뒷정리 동작들
  - 8.9. Raising and Handling Multiple Unrelated Exceptions
  - 8.10. Enriching Exceptions with Notes
- 9. 클래스
  - 9.1. 이름과 객체에 관한 한마디
  - 9.2. 파이썬 스코프와 이름 공간
    - 9.2.1. 스코프와 이름 공간 예
  - 9.3. 클래스와의 첫 만남
    - 9.3.1. 클래스 정의 문법
    - 9.3.2. 클래스 객체
    - 9.3.3. 인스턴스 객체
    - 9.3.4. 메서드 객체
    - 9.3.5. 클래스와 인스턴스 변수
  - 9.4. 기타 주의사항들
  - 9.5. 상속
    - 9.5.1. 다중 상속
  - 9.6. 비공개 변수
  - 9.7. 잡동사니
  - 9.8. 이터레이터
  - 9.9. 제너레이터
  - 9.10. 제너레이터 표현식
- 10. 표준 라이브러리 둘러보기
  - 10.1. 운영 체제 인터페이스
  - 10.2. 파일 와일드카드
  - 10.3. 명령행 인자
  - 10.4. 에러 출력 리디렉션과 프로그램 종료
  - 10.5. 문자열 패턴 매칭
  - 10.6. 수학
  - 10.7. 인터넷 액세스
  - 10.8. 날짜와 시간
  - 10.9. 데이터 압축
  - 10.10. 성능 측정
  - 10.11. 품질 관리
  - 10.12. 배터리가 포함됩니다
- 11. 표준 라이브러리 둘러보기 — 2부
  - 11.1. 출력 포매팅
  - 11.2. 템플릿
  - 11.3. 바이너리 데이터 레코드 배치 작업
  - 11.4. 다중 스레딩
  - 11.5. 로깅
  - 11.6. 약한 참조
  - 11.7. 리스트 작업 도구
  - 11.8. Decimal Floating-Point Arithmetic
- 12. 가상 환경 및 패키지
  - 12.1. 소개
  - 12.2. 가상 환경 만들기
  - 12.3. pip로 패키지 관리하기
- 13. 이제 뭘 하지?
- 14. 대화형 입력 편집 및 히스토리 치환
  - 14.1. 탭 완성 및 히스토리 편집
  - 14.2. 대화형 인터프리터 대안
- 15. Floating-Point Arithmetic: Issues and Limitations
  - 15.1. 표현 오류
- 16. 부록
  - 16.1. 대화형 모드
    - 16.1.1. 에러 처리
    - 16.1.2. 실행 가능한 파이썬 스크립트
    - 16.1.3. 대화형 시작 파일
    - 16.1.4. 커스터마이제이션 모듈