# 용어집

`>>>`

  대화형 셸의 기본 파이썬 프롬프트. 인터프리터에서 대화형으로 실행될 수 있는 코드 예에서 자주 볼 수 있다.

`...`

  The default Python prompt of the interactive shell when entering code for an indented code block, when within a pair of matching left and right delimiters (parentheses, square brackets, curly braces or triple quotes), or after specifying a decorator.

2to3

  파이썬 2.x 코드를 파이썬 3.x 코드로 변환하려고 시도하는 도구인데, 소스를 파싱하고 파스 트리를 탐색해서 감지할 수 있는 대부분의 비호환성을 다룬다.

  2to3 는 표준 라이브러리에서 `lib2to3` 로 제공된다; 독립적으로 실행할 수 있는 스크립트는 `Tools/scripts/2to3` 로 제공된다. 2to3 - Automated Python 2 to 3 code translation 를 보세요.

abstract base class (추상 베이스 클래스)

  추상 베이스 클래스는 `hasattr()` 같은 다른 테크닉들이 불편하거나 미묘하게 잘못된 (예를 들어, 매직 메서드) 경우, 인터페이스를 정의하는 방법을 제공함으로써 덕 타이핑 을 보완한다. ABC는 가상 서브 클래스를 도입하는데, 클래스를 계승하지 않으면서도 `isinstance()` 와 `issubclass()` 에 의해 감지될 수 있는 클래스들이다; `abc` 모듈 도큐멘테이션을 보세요. 파이썬에는 많은 내장 ABC 들이 따라오는데 다음과 같은 것들이 있다: 자료 구조 (`collections.abc` 모듈에서), 숫자 (`numbers` 모듈에서), 스트림 (`io` 모듈에서), 임포트 파인더와 로더 (`importlib.abc` 모듈에서). `abc` 모듈을 사용해서 자신만의 ABC를 만들 수도 있다.

annotation

  A label associated with a variable, a class attribute or a function parameter or return value, used by convention as a type hint.

  Annotations of local variables cannot be accessed at runtime, but annotations of global variables, class attributes, and functions are stored in the `__annotations__` special attribute of modules, classes, and functions, respectively.

  See variable annotation, function annotation, PEP 484 and PEP 526, which describe this functionality.

argument (인자)

  함수를 호출할 때 함수 (또는 메서드) 로 전달되는 값. 두 종류의 인자가 있다:

  - 키워드 인자 (keyword argument): 함수 호출 때 식별자가 앞에 붙은 인자 (예를 들어, `name=`) 또는 `**` 를 앞에 붙인 딕셔너리로 전달되는 인자. 예를 들어, 다음과 같은 `complex()` 호출에서 `3` 과 `5` 는 모두 키워드 인자다:

        complex(real=3, imag=5)
        complex(**{'real': 3, 'imag': 5})

  - 위치 인자 (positional argument): 키워드 인자가 아닌 인자. 위치 인자들은 인자 목록의 처음에 나오거나 이터러블 의 앞에 `*` 를 붙여 전달할 수 있다. 예를 들어, 다음과 같은 호출에서 `3` 과 `5` 는 모두 위치 인자다.

        complex(3, 5)
        complex(*(3, 5))

  인자는 함수 바의 이름 붙은 지역 변수에 대입된다. 이 대입에 적용되는 규칙들에 대해서는 호출 섹션을 보세요. 문법적으로, 어떤 표현식이건 인자로 사용될 수 있다; 구해진 값이 지역 변수에 대입된다.

  용어집의 파라미터 항목과 FAQ 질문 인자와 파라미터의 차이 와 PEP 362 도 보세요.

asynchronous context manager (비동기 컨텍스트 관리자)

  `__aenter__()` 와 `__aexit__()` 메서드를 정의함으로써 `async with` 문에서 보이는 환경을 제어하는 객체. PEP 492 로 도입되었다.

asynchronous generator (비동기 제너레이터)

  비동기 제너레이터 이터레이터 를 돌려주는 함수. `async def` 로 정의되는 코루틴 함수처럼 보이는데, `async for` 루프가 사용할 수 있는 일련의 값들을 만드는 `yield` 표현식을 포함한다는 점이 다르다.

  Usually refers to an asynchronous generator function, but may refer to an asynchronous generator iterator in some contexts. In cases where the intended meaning isn’t clear, using the full terms avoids ambiguity.

  비동기 제너레이터 함수는 `await` 표현식과, `async for` 문과, `async with` 문을 포함할 수 있다.

asynchronous generator iterator (비동기 제너레이터 이터레이터)

  비동기 제너레이터 함수가 만드는 객체.

  This is an asynchronous iterator which when called using the `__anext__()` method returns an awaitable object which will execute the body of the asynchronous generator function until the next `yield` expression.

  Each `yield` temporarily suspends processing, remembering the location execution state (including local variables and pending try-statements). When the asynchronous generator iterator effectively resumes with another awaitable returned by `__anext__()`, it picks up where it left off. See PEP 492 and PEP 525.

asynchronous iterable (비동기 이터러블)

  `async for` 문에서 사용될 수 있는 객체. `__aiter__()` 메서드는 비동기 이터레이터 를 돌려줘야 한다. PEP 492 로 도입되었다.

asynchronous iterator (비동기 이터레이터)

  An object that implements the `__aiter__()` and `__anext__()` methods. `__anext__` must return an awaitable object. `async for` resolves the awaitables returned by an asynchronous iterator’s `__anext__()` method until it raises a `StopAsyncIteration` exception. Introduced by PEP 492.

attribute (어트리뷰트)

  점표현식을 사용하는 이름으로 참조되는 객체와 결합한 값. 예를 들어, 객체 o 가 어트리뷰트 a 를 가지면, o.a 처럼 참조된다.

awaitable (어웨이터블)

  `await` 표현식에 사용할 수 있는 객체. 코루틴 이나 `__await__()` 메서드를 가진 객체가 될 수 있다. PEP 492 를 보세요.

BDFL

  자비로운 종신 독재자 (Benevolent Dictator For Life), 즉 Guido van Rossum, 파이썬의 창시자.

binary file (바이너리 파일)

  바이트열류 객체들 을 읽고 쓸 수 있는 파일 객체. 바이너리 파일의 예로는 바이너리 모드 (`'rb'`, `'wb'` 또는 `'rb+'`) 로 열린 파일, `sys.stdin.buffer`, `sys.stdout.buffer`, `io.BytesIO` 와 `gzip.GzipFile` 의 인스턴스를 들 수 있다.

  `str` 객체를 읽고 쓸 수 있는 파일 객체에 대해서는 텍스트 파일 도 참조하세요.

bytes-like object (바이트열류 객체)

  Buffer Protocol 를 지원하고 C-연속 버퍼를 익스포트 할 수 있다. 여러 공통 `memoryview` 객체들은 물론이고 `bytes`, `bytearray`, `array.array` 객체들을 포함한다. 바이트열류 객체들은 바이너리 데이터를 다루는 여러 가지 연산들에 사용될 수 있다; 압축, 바이너리 파일로 저장, 소켓을 통한 전송 같은 것들이 있다.

  어떤 연산들은 바이너리 데이터가 가변적일 필요가 있다. 이런 경우에 도큐멘테이션은 종종 《읽고-쓰기 바이트열류 객체》라고 표현한다. 가변 버퍼 객체의 예로는 `bytearray` 와 `bytearray` 의 `memoryview` 가 있다. 다른 연산들은 바이너리 데이터가 불변 객체 (《읽기 전용 바이트열류 객체》)에 저장되도록 요구한다; 이런 것들의 예로는 `bytes` 와 `bytes` 객체의 `memoryview` 가 있다.

bytecode (바이트 코드)

  파이썬 소스 코드는 바이트 코드로 컴파일되는데, CPython 인터프리터에서 파이썬 프로그램의 내부 표현이다. 바이트 코드는 `.pyc` 파일에 캐시 되어, 같은 파일을 두 번째 실행할 때 더 빨라지게 만든다 (소스에서 바이트 코드로의 재컴파일을 피할 수 있다). 이 《중간 언어》 는 각 바이트 코드에 대응하는 기계를 실행하는 가상 기계 에서 실행된다고 말한다. 바이트 코드는 서로 다른 파이썬 가상 기계에서 작동할 것으로 기대하지도, 파이썬 배포 간에 안정적이지도 않다는 것에 주의해야 한다.

  바이트 코드 명령어들의 목록은 dis 모듈 도큐멘테이션에 나온다.

class (클래스)

  사용자 정의 객체들을 만들기 위한 주형. 클래스 정의는 보통 클래스의 인스턴스를 대상으로 연산하는 메서드 정의들을 포함한다.

class variable

  A variable defined in a class and intended to be modified only at class level (i.e., not in an instance of the class).

coercion (코어션)

  같은 형의 두 인자를 수반하는 연산이 일어나는 동안, 한 형의 인스턴스를 다른 형으로 묵시적으로 변환하는 것. 예를 들어, `int(3.15)` 는 실수를 정수 `3` 으로 변환한다. 하지만, `3+4.5` 에서, 각 인자는 다른 형이고 (하나는 int, 다른 하나는 float), 둘을 더하기 전에 같은 형으로 변환해야 한다. 그렇지 않으면 `TypeError` 를 일으킨다. 코어션 없이는, 호환되는 형들조차도 프로그래머가 같은 형으로 정규화해주어야 한다, 예를 들어, 그냥 `3+4.5` 하는 대신 `float(3)+4.5`.

complex number (복소수)

  익숙한 실수 시스템의 확장인데, 모든 숫자가 실수부와 허수부의 합으로 표현된다. 허수부는 실수에 허수 단위 (`-1` 의 제곱근)를 곱한 것인데, 종종 수학에서는 `i` 로, 공학에서는 `j` 로 표기한다. 파이썬은 후자의 표기법을 쓰는 복소수를 기본 지원한다; 허수부는 `j` 접미사를 붙여서 표기한다, 예를 들어, `3+1j`. `math` 모듈의 복소수 버전이 필요하면, `cmath` 를 사용한다. 복소수의 활용은 꽤 수준 높은 수학적 기능이다. 필요하다고 느끼지 못한다면, 거의 확실히 무시해도 좋다.

context manager (컨텍스트 관리자)

  `__enter__()` 와 `__exit__()` 메서드를 정의함으로써 `with` 문에서 보이는 환경을 제어하는 객체. PEP 343 로 도입되었다.

contiguous (연속)

  버퍼는 정확히 C-연속 (C-contiguous) 이거나 포트란 연속 (Fortran contiguous) 일 때 연속이라고 여겨진다. 영차원 버퍼는 C-연속이면서 포트란 연속이다. 일차원 배열에서, 항목들은 서로에 인접하고, 0에서 시작하는 오름차순 인덱스의 순서대로 메모리에 배치되어야 한다. 다차원 C-연속 배열에서, 메모리 주소의 순서대로 항목들을 방문할 때 마지막 인덱스가 가장 빨리 변한다. 하지만, 포트란 연속 배열에서는, 첫 번째 인덱스가 가장 빨리 변한다.

coroutine (코루틴)

  코루틴은 서브루틴의 더 일반화된 형태다. 서브루틴은 한 지점에서 진입하고 다른 지점에서 탈출한다. 코루틴은 여러 다른 지점에서 진입하고, 탈출하고, 재개할 수 있다. 이것들은 `async def` 문으로 구현할 수 있다. PEP 492 를 보세요.

coroutine function (코루틴 함수)

  코루틴 객체를 돌려주는 함수. 코루틴 함수는 `async def` 문으로 정의될 수 있고, `await` 와 `async for` 와 `async with` 키워드를 포함할 수 있다. 이것들은 PEP 492 에 의해 도입되었다.

CPython

  파이썬 프로그래밍 언어의 규범적인 구현인데, python.org 에서 배포된다. 이 구현을 Jython 이나 IronPython 과 같은 다른 것들과 구별할 필요가 있을 때 용어 《CPython》 이 사용된다.

decorator (데코레이터)

  다른 함수를 돌려주는 함수인데, 보통 `@wrapper` 문법을 사용한 함수 변환으로 적용된다. 데코레이터의 흔한 예는 `classmethod()` 과 `staticmethod()` 다.

  데코레이터 문법은 단지 편의 문법일 뿐이다. 다음 두 함수 정의는 의미상으로 동등하다:

      def f(...):
          ...
      f = staticmethod(f)

      @staticmethod
      def f(...):
          ...

  같은 개념이 클래스에도 존재하지만, 덜 자주 쓰인다. 데코레이터에 대한 더 자세한 내용은 함수 정의 와 클래스 정의 의 도큐멘테이션을 보면 된다.

descriptor (디스크립터)

  메서드 `__get__()` 이나 `__set__()` 이나 `__delete__()` 를 정의하는 객체. 클래스 어트리뷰트가 디스크립터일 때, 어트리뷰트 조회는 특별한 연결 작용을 일으킨다. 보통, a.b 를 읽거나, 쓰거나, 삭제하는데 사용할 때, a 의 클래스 딕셔너리에서 b 라고 이름 붙여진 객체를 찾는다. 하지만 b 가 디스크립터면, 해당하는 디스크립터 메서드가 호출된다. 디스크립터를 이해하는 것은 파이썬에 대한 깊은 이해의 열쇠인데, 함수, 메서드, 프라퍼티, 클래스 메서드, 스태틱 메서드, 슈퍼클래스 참조 등의 많은 기능의 기초를 이루고 있기 때문이다.

  디스크립터의 메서드들에 대한 자세한 내용은 디스크립터 구현하기 에 나온다.

dictionary (딕셔너리)

  임의의 키를 값에 대응시키는 연관 배열 (associative array). 키는 `__hash__()` 와 `__eq__()` 메서드를 갖는 모든 객체가 될 수 있다. 펄에서 해시라고 부른다.

dictionary view (딕셔너리 뷰)

  `dict.keys()`, `dict.values()`, `dict.items()` 메서드가 돌려주는 객체들을 딕셔너리 뷰라고 부른다. 이것들은 딕셔너리 항목들에 대한 동적인 뷰를 제공하는데, 딕셔너리가 변경될 때, 뷰가 이 변화를 반영한다는 뜻이다. 딕셔너리 뷰를 완전한 리스트로 바꾸려면 `list(dictview)` 를 사용하면 된다. 딕셔너리 뷰 객체 를 보세요.

docstring (독스트링)

  클래스, 함수, 모듈에서 첫 번째 표현식으로 나타나는 문자열 리터럴. 스위트가 실행될 때는 무시되지만, 컴파일러에 의해 인지되어 둘러싼 클래스, 함수, 모듈의 `__doc__` 어트리뷰트로 삽입된다. 인트로스팩션을 통해 사용할 수 있으므로, 객체의 도큐멘테이션을 위한 규범적인 장소다.

duck-typing (덕 타이핑)

  올바른 인터페이스를 가졌는지 판단하는데 객체의 형을 보지 않는 프로그래밍 스타일; 대신, 단순히 메서드나 어트리뷰트가 호출되거나 사용된다 (《오리처럼 보이고 오리처럼 꽥꽥댄다면, 그것은 오리다.》) 특정한 형 대신에 인터페이스를 강조함으로써, 잘 설계된 코드는 다형적인 치환을 허락함으로써 유연성을 개선할 수 있다. 덕 타이핑은 `type()` 이나 `isinstance()` 을 사용한 검사를 피한다. (하지만, 덕 타이핑이 추상 베이스 클래스 로 보완될 수 있음에 유의해야 한다.) 대신에, `hasattr()` 검사나 EAFP 프로그래밍을 쓴다.

EAFP

  허락보다는 용서를 구하기가 쉽다 (Easier to ask for forgiveness than permission). 이 흔히 볼 수 있는 파이썬 코딩 스타일은, 올바른 키나 어트리뷰트의 존재를 가정하고, 그 가정이 틀리면 예외를 잡는다. 이 깔끔하고 빠른 스타일은 많은 `try` 와 `except` 문의 존재로 특징지어진다. 이 테크닉은 C와 같은 다른 많은 언어에서 자주 사용되는 LBYL 스타일과 대비된다.

expression (표현식)

  어떤 값으로 구해질 수 있는 문법적인 조각. 다른 말로 표현하면, 표현식은 리터럴, 이름, 어트리뷰트 액세스, 연산자, 함수들과 같은 값을 돌려주는 표현 요소들을 쌓아 올린 것이다. 다른 많은 언어와 대조적으로, 모든 언어 구성물들이 표현식인 것은 아니다. `if` 처럼, 표현식으로 사용할 수 없는 문장 들이 있다. 대입 또한 문장이고, 표현식이 아니다.

extension module (확장 모듈)

  C 나 C++ 로 작성된 모듈인데, 파이썬의 C API를 사용해서 핵심이나 사용자 코드와 상호 작용한다.

f-string (f-문자열)

  `'f'` 나 `'F'` 를 앞에 붙인 문자열 리터럴들을 흔히 《f-문자열》이라고 부르는데, 포맷 문자열 리터럴 의 줄임말이다. PEP 498 을 보세요.

file object (파일 객체)

  하부 자원에 대해 파일 지향적 API (`read()` 나 `write()` 같은 메서드들) 를 드러내는 객체. 만들어진 방법에 따라, 파일 객체는 실제 디스크 상의 파일이나 다른 저장장치나 통신 장치 (예를 들어, 표준 입출력, 인-메모리 버퍼, 소켓, 파이프, 등등)에 대한 액세스를 중계할 수 있다. 파일 객체는 파일류 객체 (file-like objects) 나 스트림 (streams) 이라고도 불린다.

  실제로는 세 부류의 파일 객체들이 있다. 날(raw) 바이너리 파일, 버퍼드(buffered) 바이너리 파일, 텍스트 파일. 이들의 인터페이스는 `io` 모듈에서 정의된다. 파일 객체를 만드는 규범적인 방법은 `open()` 함수를 쓰는 것이다.

file-like object (파일류 객체)

  파일 객체 의 비슷한 말.

finder (파인더)

  임포트될 모듈을 위한 로더 를 찾으려고 시도하는 객체.

  파이썬 3.3. 이후로, 두 종류의 파인더가 있다: `sys.meta_path` 와 함께 사용하는 메타 경로 파인더 와 `sys.path_hooks` 과 함께 사용하는 경로 엔트리 파인더.

  더 자세한 내용은 PEP 302, PEP 420, PEP 451 에 나온다.

floor division (정수 나눗셈)

  가장 가까운 정수로 내림하는 수학적 나눗셈. 정수 나눗셈 연산자는 `//` 다. 예를 들어, 표현식 `11 // 4` 의 값은 `2` 가 되지만, 실수 나눗셈은 `2.75` 를 돌려준다. `(-11) // 4` 가 `-2.75` 를 내림 한 `-3` 이 됨에 유의해야 한다. PEP 238 를 보세요.

function (함수)

  호출자에게 어떤 값을 돌려주는 일련의 문장들. 없거나 그 이상의 인자 가 전달될 수 있는데, 바디의 실행에 사용될 수 있다. 파라미터 와 메서드 와 함수 정의 섹션도 보세요.

function annotation (함수 어노테이션)

  An annotation of a function parameter or return value.

  Function annotations are usually used for type hints: for example, this function is expected to take two `int` arguments and is also expected to have an `int` return value:

      def sum_two_numbers(a: int, b: int) -> int:
         return a + b

  Function annotation syntax is explained in section 함수 정의.

  See variable annotation and PEP 484, which describe this functionality.

__future__

  프로그래머가 현재 인터프리터와 호환되지 않는 새 언어 기능들을 활성화할 수 있도록 하는 가상 모듈.

  `__future__` 모듈을 임포트하고 그 변수들의 값들을 구해서, 새 기능이 언제 처음으로 언어에 추가되었고, 언제부터 그것이 기본이 되는지 볼 수 있다:

      >>> import __future__
      >>> __future__.division
      _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

garbage collection (가비지 수거)

  더 사용되지 않는 메모리를 반납하는 절차. 파이썬은 참조 횟수 추적과 참조 순환을 감지하고 끊을 수 있는 순환 가비지 수거기를 통해 가비지 수거를 수행한다. 가비지 수거기는 `gc` 모듈을 사용해서 제어할 수 있다.

generator (제너레이터)

  제너레이터 이터레이터 를 돌려주는 함수. 일반 함수처럼 보이는데, 일련의 값들을 만드는 `yield` 표현식을 포함한다는 점이 다르다. 이 값들은 for-루프로 사용하거나 `next()` 함수로 한 번에 하나씩 꺼낼 수 있다.

  보통 제너레이터 함수를 가리키지만, 어떤 문맥에서는 제너레이터 이터레이터 를 가리킨다. 의도하는 의미가 명확하지 않은 경우는, 완전한 용어를 써서 모호함을 없앤다.

generator iterator (제너레이터 이터레이터)

  제너레이터 함수가 만드는 객체.

  Each `yield` temporarily suspends processing, remembering the location execution state (including local variables and pending try-statements). When the generator iterator resumes, it picks up where it left off (in contrast to functions which start fresh on every invocation).

generator expression (제너레이터 표현식)

  이터레이터를 돌려주는 표현식. 루프 변수와 범위를 정의하는 `for` 표현식과 생략 가능한 `if` 표현식이 뒤에 붙는 일반 표현식 처럼 보인다. 결합한 표현식은 둘러싼 함수를 위한 값들을 만들어낸다:

      >>> sum(i*i for i in range(10))         # sum of squares 0, 1, 4, ... 81
      285

generic function (제네릭 함수)

  같은 연산을 서로 다른 형들에 대해 구현한 여러 함수로 구성된 함수. 호출 때 어떤 구현이 사용될지는 디스패치 알고리즘에 의해 결정된다.

  싱글 디스패치 용어집 항목과 `functools.singledispatch()` 데코레이터와 PEP 443 도 보세요.

GIL

  전역 인터프리터 록 을 보세요.

global interpreter lock (전역 인터프리터 록)

  한 번에 오직 하나의 스레드가 파이썬 바이트 코드 를 실행하도록 보장하기 위해 CPython 인터프리터가 사용하는 메커니즘. (`dict` 와 같은 중요한 내장형들을 포함하는) 객체 모델이 묵시적으로 동시 액세스에 대해 안전하도록 만들어서 CPython 구현을 단순하게 만든다. 인터프리터 전체를 로킹하는 것은 인터프리터를 다중스레드화하기 쉽게 만드는 대신, 다중 프로세서 기계가 제공하는 병렬성의 많은 부분을 희생한다.

  하지만, 어떤 확장 모듈들은, 표준이나 제삼자 모두, 압축이나 해싱 같은 계산 집약적인 작업을 수행할 때는 GIL 을 반납하도록 설계되었다. 또한, I/O를 할 때는 항상 GIL 을 반납한다.

  (훨씬 더 미세하게 공유 데이터를 로킹하는) 《스레드에 자유로운(free-threaded)》 인터프리터를 만들고자 하는 과거의 노력은 성공적이지 못했는데, 흔한 단일 프로세서 경우의 성능 저하가 심하기 때문이다. 이 성능 이슈를 극복하는 것은 구현을 훨씬 복잡하게 만들어서 유지 비용이 더 들어갈 것으로 여겨지고 있다.

hashable (해시 가능)

  객체가 일생 그 값이 변하지 않는 해시값을 갖고 (`__hash__()` 메서드가 필요하다), 다른 객체와 비교될 수 있으면 (`__eq__()` 메서드가 필요하다), 해시 가능 하다고 한다. 같다고 비교되는 해시 가능한 객체들의 해시값은 같아야 한다.

  해시 가능성은 객체를 딕셔너리의 키나 집합의 멤버로 사용할 수 있게 하는데, 이 자료 구조들이 내부적으로 해시값을 사용하기 때문이다.

  모든 파이썬의 불변 내장 객체들은 해시 가능하다. (리스트나 딕셔너리 같은) 가변 컨테이너들은 그렇지 않다. 사용자 정의 클래스의 인스턴스 객체들은 기본적으로 해시 가능하다. (자기 자신을 제외하고는) 모두 다르다고 비교되고, 해시값은 `id()` 로 부터 만들어진다.

IDLE

  파이썬을 위한 통합 개발 환경 (Integrated Development Environment). IDLE은 파이썬의 표준 배포판에 따라오는 기초적인 편집기와 인터프리터 환경이다.

immutable (불변)

  고정된 값을 갖는 객체. 불변 객체는 숫자, 문자열, 튜플을 포함한다. 이런 객체들은 변경될 수 없다. 새 값을 저장하려면 새 객체를 만들어야 한다. 변하지 않는 해시값이 있어야 하는 곳에서 중요한 역할을 한다, 예를 들어, 딕셔너리의 키.

import path (임포트 경로)

  경로 기반 파인더 가 임포트할 모듈을 찾기 위해 검색하는 장소들 (또는 경로 엔트리) 의 목록. 임포트하는 동안, 이 장소들의 목록은 보통 `sys.path` 로부터 온다, 하지만 서브 패키지의 경우 부모 패키지의 `__path__` 어트리뷰트로부터 올 수도 있다.

importing (임포팅)

  한 모듈의 파이썬 코드가 다른 모듈의 파이썬 코드에서 사용될 수 있도록 하는 절차.

importer (임포터)

  모듈을 찾기도 하고 로드 하기도 하는 객체; 동시에 파인더 이자 로더 객체다.

interactive (대화형)

  파이썬은 대화형 인터프리터를 갖고 있는데, 인터프리터 프롬프트에서 문장과 표현식을 입력할 수 있고, 즉각 실행된 결과를 볼 수 있다는 뜻이다. 인자 없이 단지 `python` 을 실행하라 (컴퓨터의 주메뉴에서 선택하는 것도 가능할 수 있다). 새 아이디어를 검사하거나 모듈과 패키지를 들여다보는 매우 강력한 방법이다 (`help(x)` 를 기억하세요).

interpreted (인터프리티드)

  바이트 코드 컴파일러의 존재 때문에 그 구분이 흐릿해지기는 하지만, 파이썬은 컴파일 언어가 아니라 인터프리터 언어다. 이것은 명시적으로 실행 파일을 만들지 않고도, 소스 파일을 직접 실행할 수 있다는 뜻이다. 그 프로그램이 좀 더 천천히 실행되기는 하지만, 인터프리터 언어는 보통 컴파일 언어보다 짧은 개발/디버깅 주기를 갖는다. 대화형 도 보세요.

interpreter shutdown (인터프리터 종료)

  종료하라는 요청을 받을 때, 파이썬 인터프리터는 특별한 시기에 진입하는데, 모듈이나 여러 가지 중요한 내부 구조들과 같은 모든 할당된 자원들을 단계적으로 반납한다. 또한, 가비지 수거기 를 여러 번 호출한다. 사용자 정의 파괴자나 weakref 콜백에 있는 코드들의 실행을 시작시킬 수 있다. 종료 시기 동안 실행되는 코드는 다양한 예외들을 만날 수 있는데, 그것이 의존하는 자원들이 더 기능하지 않을 수 있기 때문이다 (흔한 예는 라이브러리 모듈이나 경고 장치들이다).

  인터프리터 종료의 주된 원인은 실행되는 `__main__` 모듈이나 스크립트가 실행을 끝내는 것이다.

iterable (이터러블)

  멤버들을 한 번에 하나씩 돌려줄 수 있는 객체. 이터러블의 예로는 모든 (`list`, `str`, `tuple` 같은) 시퀀스 형들, `dict` 같은 몇몇 비시퀀스 형들, 파일 객체들, `__iter__()` 나 시퀀스 개념을 구현하는 `__getitem__()` 메서드를 써서 정의한 모든 클래스의 객체들이 있다.

  이터러블은 `for` 루프에 사용될 수 있고, 시퀀스를 필요로 하는 다른 많은 곳 (`zip()`, `map()`, …) 에 사용될 수 있다. 이터러블 객체가 내장 함수 `iter()` 에 인자로 전달되면, 그 객체의 이터레이터를 돌려준다. 이 이터레이터는 값들의 집합을 한 번 거치는 동안 유효하다. 이터러블을 사용할 때, 보통은 `iter()` 를 호출하거나, 이터레이터 객체를 직접 다룰 필요는 없다. `for` 문은 이것들을 여러분을 대신해서 자동으로 해주는데, 루프를 도는 동안 이터레이터를 잡아둘 이름 없는 변수를 만든다. 이터레이터, 시퀀스, 제너레이터 도 보세요.

iterator (이터레이터)

  데이터의 스트림을 표현하는 객체. 이터레이터의 `__next__()` 메서드를 반복적으로 호출하면 (또는 내장 함수 `next()` 로 전달하면) 스트림에 있는 항목들을 차례대로 돌려준다. 더 이상의 데이터가 없을 때는 대신 `StopIteration` 예외를 일으킨다. 이 지점에서, 이터레이터 객체는 소진되고, 이후의 모든 `__next__()` 메서드 호출은 `StopIteration` 예외를 다시 일으키기만 한다. 이터레이터는 이터레이터 객체 자신을 돌려주는 `__iter__()` 메서드를 가질 것이 요구되기 때문에, 이터레이터는 이터러블이기도 하고 다른 이터러블들을 받아들이는 대부분의 곳에서 사용될 수 있다. 중요한 예외는 여러 번의 이터레이션을 시도하는 코드다. (`list` 같은) 컨테이너 객체는 `iter()` 함수로 전달하거나 `for` 루프에 사용할 때마다 새 이터레이터를 만든다. 이런 것을 이터레이터에 대해서 수행하려고 하면, 지난 이터레이션에 사용된 이미 소진된 이터레이터를 돌려줘서, 빈 컨테이너처럼 보이게 만든다.

  이터레이터 형 에 더 자세한 내용이 있다.

key function (키 함수)

  키 함수 또는 콜레이션(collation) 함수는 정렬(sorting)이나 배열(ordering)에 사용되는 값을 돌려주는 콜러블이다. 예를 들어, `locale.strxfrm()` 은 로케일 특정 방식을 따르는 정렬 키를 만드는 데 사용된다.

  파이썬의 많은 도구가 요소들이 어떻게 순서 지어지고 묶이는지를 제어하기 위해 키 함수를 받아들인다. 이런 것들에는 `min()`, `max()`, `sorted()`, `list.sort()`, `heapq.merge()`, `heapq.nsmallest()`, `heapq.nlargest()`, `itertools.groupby()` 이 있다.

  키 함수를 만드는 데는 여러 방법이 있다. 예를 들어, `str.lower()` 메서드는 케이스 구분 없는 정렬을 위한 키 함수로 사용될 수 있다. 대안적으로, 키 함수는 `lambda` 표현식으로 만들 수도 있는데, 이런 식이다: `lambda r: (r[0], r[2])`. 또한, `operator` 모듈은 세 개의 키 함수 생성자를 제공한다: `attrgetter()`, `itemgetter()`, `methodcaller()`. 키 함수를 만들고 사용하는 법에 대한 예로 Sorting HOW TO 를 보세요.

keyword argument (키워드 인자)

  인자 를 보세요.

lambda (람다)

  호출될 때 값이 구해지는 하나의 표현식 으로 구성된 이름 없는 인라인 함수. 람다 함수를 만드는 문법은 `lambda [parameters]: expression` 이다.

LBYL

  뛰기 전에 보라 (Look before you leap). 이 코딩 스타일은 호출이나 조회를 하기 전에 명시적으로 사전 조건들을 검사한다. 이 스타일은 EAFP 접근법과 대비되고, 많은 `if` 문의 존재로 특징지어진다.

  다중 스레드 환경에서, LBYL 접근법은 《보기》와 《뛰기》 간에 경쟁 조건을 만들게 될 위험이 있다. 예를 들어, 코드 `if key in mapping: return mapping[key]` 는 검사 후에, 하지만 조회 전에, 다른 스레드가 key 를 mapping 에서 제거하면 실패할 수 있다. 이런 이슈는 록이나 EAFP 접근법을 사용함으로써 해결될 수 있다.

list (리스트)

  A built-in Python sequence. Despite its name it is more akin to an array in other languages than to a linked list since access to elements is O(1).

list comprehension (리스트 컴프리헨션)

  시퀀스의 요소들 전부 또는 일부를 처리하고 그 결과를 리스트로 돌려주는 간결한 방법. `result = ['{:#04x}'.format(x) for x in range(256) if x % 2 == 0]` 는 0에서 255 사이에 있는 짝수들의 16진수 (0x..) 들을 포함하는 문자열의 리스트를 만든다. `if` 절은 생략할 수 있다. 생략하면, `range(256)` 에 있는 모든 요소가 처리된다.

loader (로더)

  모듈을 로드하는 객체. `load_module()` 이라는 이름의 메서드를 정의해야 한다. 로더는 보통 파인더 가 돌려준다. 자세한 내용은 PEP 302 를, 추상 베이스 클래스 는 `importlib.abc.Loader` 를 보세요.

mapping (매핑)

  임의의 키 조회를 지원하고 `Mapping` 이나 `MutableMapping` 추상 베이스 클래스 에 지정된 메서드들을 구현하는 컨테이너 객체. 예로는 `dict`, `collections.defaultdict`, `collections.OrderedDict`, `collections.Counter` 를 들 수 있다.

meta path finder (메타 경로 파인더)

  `sys.meta_path` 의 검색이 돌려주는 파인더. 메타 경로 파인더는 경로 엔트리 파인더 와 관련되어 있기는 하지만 다르다.

  메타 경로 파인더가 구현하는 메서드들에 대해서는 `importlib.abc.MetaPathFinder` 를 보면 된다.

metaclass (메타 클래스)

  클래스의 클래스. 클래스 정의는 클래스 이름, 클래스 딕셔너리, 베이스 클래스들의 목록을 만든다. 메타 클래스는 이 세 인자를 받아서 클래스를 만드는 책임을 진다. 대부분의 객체 지향형 프로그래밍 언어들은 기본 구현을 제공한다. 파이썬을 특별하게 만드는 것은 커스텀 메타 클래스를 만들 수 있다는 것이다. 대부분 사용자에게는 이 도구가 전혀 필요 없지만, 필요가 생길 때, 메타 클래스는 강력하고 우아한 해법을 제공한다. 어트리뷰트 액세스의 로깅(logging), 스레드 안전성의 추가, 객체 생성 추적, 싱글톤 구현과 많은 다른 작업에 사용됐다.

  메타 클래스 에서 더 자세한 내용을 찾을 수 있다.

method (메서드)

  클래스 바디 안에서 정의되는 함수. 그 클래스의 인스턴스의 어트리뷰트로서 호출되면, 그 메서드는 첫 번째 인자 (보통 `self` 라고 불린다) 로 인스턴스 객체를 받는다. 함수 와 중첩된 스코프 를 보세요.

method resolution order (메서드 결정 순서)

  메서드 결정 순서는 조회하는 동안 멤버를 검색하는 베이스 클래스들의 순서다. 2.3 릴리스부터 파이썬 인터프리터에 사용된 알고리즘의 상세한 내용은 The Python 2.3 Method Resolution Order 를 보면 된다.

module (모듈)

  파이썬 코드의 조직화 단위를 담당하는 객체. 모듈은 임의의 파이썬 객체들을 담는 이름 공간을 갖는다. 모듈은 임포팅 절차에 의해 파이썬으로 로드된다.

  패키지 도 보세요.

module spec (모듈 스펙)

  모듈을 로드하는데 사용되는 임포트 관련 정보들을 담고 있는 이름 공간. `importlib.machinery.ModuleSpec` 의 인스턴스.

MRO

  메서드 결정 순서 를 보세요.

mutable (가변)

  가변 객체는 값이 변할 수 있지만 `id()` 는 일정하게 유지한다. 불변 도 보세요.

named tuple (네임드 튜플)

  인덱싱할 수 있는 요소들을 이름 붙은 어트리뷰트로도 액세스할 수 있는 모든 튜플류 클래스 (예를 들어, `time.localtime()` 은 year 가 `t[0]` 처럼 인덱스로도, `t.tm_year` 처럼 어트리뷰트로도 액세스할 수 있는 튜플류 객체를 돌려준다.)

  네임드 튜플은 `time.struct_time` 같은 내장형일 수도, 일반 클래스 정의로 만들 수도 있다. 모든 기능이 구현된 네임드 튜플을 팩토리 함수 `collections.namedtuple()` 로도 만들 수 있다. 마지막 접근법은 `Employee(name='jones', title='programmer')` 와 같은 스스로 문서로 만드는 repr 과 같은 확장 기능도 자동 제공한다.

namespace (이름 공간)

  변수가 저장되는 장소. 이름 공간은 딕셔너리로 구현된다. 객체에 중첩된 이름 공간 (메서드 에서) 뿐만 아니라 지역, 전역, 내장 이름 공간이 있다. 이름 공간은 이름 충돌을 방지해서 모듈성을 지원한다. 예를 들어, 함수 `builtins.open` 과 `os.open()` 은 그들의 이름 공간에 의해 구별된다. 또한, 이름 공간은 어떤 모듈이 함수를 구현하는지를 분명하게 만들어서 가독성과 유지 보수성에 도움을 준다. 예를 들어, `random.seed()` 또는 `itertools.islice()` 라고 쓰면 그 함수들이 각각 `random` 과 `itertools` 모듈에 의해 구현되었음이 명확해진다.

namespace package (이름 공간 패키지)

  오직 서브 패키지들의 컨테이너로만 기능하는 PEP 420 패키지. 이름 공간 패키지는 물리적인 실체가 없을 수도 있고, 특히 `__init__.py` 파일이 없으므로 정규 패키지 와는 다르다.

  모듈 도 보세요.

nested scope (중첩된 스코프)

  둘러싼 정의에서 변수를 참조하는 능력. 예를 들어, 다른 함수 내부에서 정의된 함수는 바깥 함수에 있는 변수들을 참조할 수 있다. 중첩된 스코프는 기본적으로는 참조만 가능할 뿐, 대입은 되지 않는다는 것에 주의해야 한다. 지역 변수들은 가장 내부의 스코프에서 읽고 쓴다. 마찬가지로, 전역 변수들은 전역 이름 공간에서 읽고 쓴다. `nonlocal` 은 바깥 스코프에 쓰는 것을 허락한다.

new-style class (뉴스타일 클래스)

  지금은 모든 클래스 객체에 사용되고 있는 클래스 버전의 예전 이름. 초기의 파이썬 버전에서는, 오직 뉴스타일 클래스만 `__slots__`, 디스크립터, 프라퍼티, `__getattribute__()`, 클래스 메서드, 스태틱 메서드와 같은 파이썬의 새롭고 다양한 기능들을 사용할 수 있었다.

object (객체)

  상태 (어트리뷰트나 값) 를 갖고 동작 (메서드) 이 정의된 모든 데이터. 또한, 모든 뉴스타일 클래스 의 최종적인 베이스 클래스다.

package (패키지)

  서브 모듈들이나, 재귀적으로 서브 패키지들을 포함할 수 있는 파이썬 모듈. 기술적으로, 패키지는 `__path__` 어트리뷰트가 있는 파이썬 모듈이다.

  정규 패키지 와 이름 공간 패키지 도 보세요.

parameter (파라미터)

  함수 (또는 메서드) 정의에서 함수가 받을 수 있는 인자 (또는 어떤 경우 인자들) 를 지정하는 이름 붙은 엔티티. 다섯 종류의 파라미터가 있다:

  - 위치-키워드 (positional-or-keyword): 위치 인자 나 키워드 인자 로 전달될 수 있는 인자를 지정한다. 이것이 기본 형태의 파라미터다, 예를 들어 다음에서 foo 와 bar:

        def func(foo, bar=None): ...

  - 위치-전용 (positional-only): 위치로만 제공될 수 있는 인자를 지정한다. 파이썬은 위치-전용 파라미터를 정의하는 문법을 갖고 있지 않다. 하지만, 어떤 매장 함수들은 위치-전용 파라미터를 갖는다 (예를 들어, `abs()`).

  - 키워드-전용 (keyword-only): 키워드로만 제공될 수 있는 인자를 지정한다. 키워드-전용 파라미터는 함수 정의의 파라미터 목록에서 앞에 하나의 가변-위치 파라미터나 `*` 를 그대로 포함해서 정의할 수 있다. 예를 들어, 다음에서 kw_only1 와 kw_only2:

        def func(arg, *, kw_only1, kw_only2): ...

  - 가변-위치 (var-positional): (다른 파라미터들에 의해서 이미 받아들여진 위치 인자들에 더해) 제공될 수 있는 위치 인자들의 임의의 시퀀스를 지정한다. 이런 파라미터는 파라미터 이름에 `*` 를 앞에 붙여서 정의될 수 있다, 예를 들어 다음에서 args:

        def func(*args, **kwargs): ...

  - 가변-키워드 (var-keyword): (다른 파라미터들에 의해서 이미 받아들여진 키워드 인자들에 더해) 제공될 수 있는 임의의 개수 키워드 인자들을 지정한다. 이런 파라미터는 파라미터 이름에 `**` 를 앞에 붙여서 정의될 수 있다, 예를 들어 위의 예 에서 kwargs.

  파라미터는 선택적 인자들을 위한 기본값뿐만 아니라 선택적이거나 필수 인자들을 지정할 수 있다.

  인자 용어집 항목, 인자와 파라미터의 차이 에 나오는 FAQ 질문, `inspect.Parameter` 클래스, 함수 정의 섹션, PEP 362 도 보세요.

path entry (경로 엔트리)

  경로 기반 파인더 가 임포트할 모듈들을 찾기 위해 참고하는 임포트 경로 상의 하나의 장소.

path entry finder (경로 엔트리 파인더)

  `sys.path_hooks` 에 있는 콜러블 (즉, 경로 엔트리 훅) 이 돌려주는 파인더 인데, 주어진 경로 엔트리 로 모듈을 찾는 방법을 알고 있다.

  경로 엔트리 파인더들이 구현하는 메서드들은 `importlib.abc.PathEntryFinder` 에 나온다.

path entry hook (경로 엔트리 훅)

  `sys.path_hook` 리스트에 있는 콜러블인데, 특정 경로 엔트리 에서 모듈을 찾는 법을 알고 있다면 경로 엔트리 파인더 를 돌려준다.

path based finder (경로 기반 파인더)

  기본 메타 경로 파인더들 중 하나인데, 임포트 경로 에서 모듈을 찾는다.

path-like object (경로류 객체)

  파일 시스템 경로를 나타내는 객체. 경로류 객체는 경로를 나타내는 `str` 나 `bytes` 객체이거나 `os.PathLike` 프로토콜을 구현하는 객체다. `os.PathLike` 프로토콜을 지원하는 객체는 `os.fspath()` 함수를 호출해서 `str` 나 `bytes` 파일 시스템 경로로 변환될 수 있다; 대신 `os.fsdecode()` 와 `os.fsencode()` 는 각각 `str` 나 `bytes` 결과를 보장하는데 사용될 수 있다. PEP 519 로 도입되었다.

PEP

  파이썬 개선 제안. PEP는 파이썬 커뮤니티에 정보를 제공하거나 파이썬 또는 그 프로세스 또는 환경에 대한 새로운 기능을 설명하는 설계 문서다. PEP는 제안된 기능에 대한 간결한 기술 사양 및 근거를 제공해야 한다.

  PEP는 주요 새로운 기능을 제안하고 문제에 대한 커뮤니티 입력을 수집하며 파이썬에 들어간 설계 결정을 문서로 만들기 위한 기본 메커니즘이다. PEP 작성자는 커뮤니티 내에서 합의를 구축하고 반대 의견을 문서화 할 책임이 있다.

  PEP 1 참조하세요.

portion (포션)

  PEP 420 에서 정의한 것처럼, 이름 공간 패키지에 이바지하는 하나의 디렉터리에 들어있는 파일들의 집합 (zip 파일에 저장되는 것도 가능하다).

positional argument (위치 인자)

  인자 를 보세요.

provisional API (잠정 API)

  잠정 API는 표준 라이브러리의 과거 호환성 보장으로부터 신중히 제외된 것이다. 인터페이스의 큰 변화가 예상되지는 않지만, 잠정적이라고 표시되는 한, 코어 개발자들이 필요하다고 생각한다면 과거 호환성이 유지되지 않는 변경이 일어날 수 있다. 그런 변경은 불필요한 방식으로 일어나지는 않을 것이다 — API를 포함하기 전에 놓친 중대하고 근본적인 결함이 발견된 경우에만 일어날 것이다.

  잠정 API에서조차도, 과거 호환성이 유지되지 않는 변경은 《최후의 수단》으로 여겨진다 - 모든 식별된 문제들에 대해 과거 호환성을 유지하는 해법을 찾으려는 모든 시도가 선행된다.

  이 절차는 표준 라이브러리가 오랜 시간 동안 잘못된 설계 오류에 발목 잡히지 않고 발전할 수 있도록 만든다. 더 자세한 내용은 PEP 411 를 보면 된다.

provisional package (잠정 패키지)

  잠정 API 를 보세요.

Python 3000 (파이썬 3000)

  파이썬 3.x 배포 라인의 별명 (버전 3의 배포가 먼 미래의 이야기던 시절에 만들어진 이름이다.) 이것을 《Py3k》 로 줄여 쓰기도 한다.

Pythonic (파이썬다운)

  다른 언어들에서 일반적인 개념들을 사용해서 코드를 구현하는 대신, 파이썬 언어에서 가장 자주 사용되는 이디엄들을 가까이 따르는 아이디어나 코드 조작. 예를 들어, 파이썬에서 자주 쓰는 이디엄은 `for` 문을 사용해서 이터러블의 모든 요소로 루핑하는 것이다. 다른 많은 언어에는 이런 종류의 구성물이 없으므로, 파이썬에 익숙하지 않은 사람들은 대신에 숫자 카운터를 사용하기도 한다:

      for i in range(len(food)):
          print(food[i])

  더 깔끔한, 파이썬다운 방법은 이렇다:

      for piece in food:
          print(piece)

qualified name (정규화된 이름)

  모듈의 전역 스코프에서 모듈에 정의된 클래스, 함수, 메서드에 이르는 《경로》를 보여주는 점으로 구분된 이름. PEP 3155 에서 정의된다. 최상위 함수와 클래스의 경우에, 정규화된 이름은 객체의 이름과 같다:

      >>> class C:
      ...     class D:
      ...         def meth(self):
      ...             pass
      ...
      >>> C.__qualname__
      'C'
      >>> C.D.__qualname__
      'C.D'
      >>> C.D.meth.__qualname__
      'C.D.meth'

  모듈을 가리키는데 사용될 때, 완전히 정규화된 이름(fully qualified name) 은 모든 부모 패키지들을 포함해서 모듈로 가는 점으로 분리된 이름을 의미한다, 예를 들어, `email.mime.text`:

      >>> import email.mime.text
      >>> email.mime.text.__name__
      'email.mime.text'

reference count (참조 횟수)

  객체에 대한 참조의 개수. 객체의 참조 횟수가 0으로 떨어지면, 메모리가 반납된다. 참조 횟수 추적은 일반적으로 파이썬 코드에 노출되지는 않지만, CPython 구현의 핵심 요소다. `sys` 모듈은 특정 객체의 참조 횟수를 돌려주는 `getrefcount()` 을 정의한다.

regular package (정규 패키지)

  `__init__.py` 파일을 포함하는 디렉터리와 같은 전통적인 패키지.

  이름 공간 패키지 도 보세요.

__slots__

  클래스 내부의 선언인데, 인스턴스 어트리뷰트들을 위한 공간을 미리 선언하고 인스턴스 딕셔너리를 제거함으로써 메모리를 절감하는 효과를 준다. 인기 있기는 하지만, 이 테크닉은 올바르게 사용하기가 좀 까다로운 편이라서, 메모리에 민감한 응용 프로그램에서 많은 수의 인스턴스가 있는 특별한 경우로 한정하는 것이 좋다.

sequence (시퀀스)

  `__getitem__()` 특수 메서드를 통해 정수 인덱스를 사용한 빠른 요소 액세스를 지원하고, 시퀀스의 길이를 돌려주는 `__len__()` 메서드를 정의하는 이터러블. 몇몇 내장 시퀀스들을 나열해보면, `list`, `str`, `tuple`, `bytes` 가 있다. `dict` 또한 `__getitem__()` 과 `__len__()` 을 지원하지만, 조회에 정수 대신 임의의 불변 키를 사용하기 때문에 시퀀스가 아니라 매핑으로 취급된다는 것에 주의해야 한다.

  `collections.abc.Sequence` 추상 베이스 클래스는 `__getitem__()` 과 `__len__()` 를 넘어서 훨씬 풍부한 인터페이스를 정의하는데, `count()`, `index()`, `__contains__()`, `__reversed__()` 를 추가한다. 이 확장된 인터페이스를 구현한 형을 `register()` 를 사용해서 명시적으로 등록할 수 있다.

single dispatch (싱글 디스패치)

  구현이 하나의 인자의 형에 기초해서 결정되는 제네릭 함수 디스패치의 한 형태.

slice (슬라이스)

  보통 시퀀스 의 일부를 포함하는 객체. 슬라이스는 서브 스크립트 표기법을 사용해서 만든다. `variable_name[1:3:5]` 처럼, `[]` 안에서 여러 개의 숫자를 콜론으로 분리한다. 꺾쇠괄호 (서브 스크립트) 표기법은 내부적으로 `slice` 객체를 사용한다.

special method (특수 메서드)

  파이썬이 형에 어떤 연산을, 덧셈 같은, 실행할 때 묵시적으로 호출되는 메서드. 이런 메서드는 두 개의 밑줄로 시작하고 끝나는 이름을 갖고 있다. 특수 메서드는 특수 메서드 이름들 에 문서로 만들어져 있다.

statement (문장)

  문장은 스위트 (코드의 《블록(block)》) 를 구성하는 부분이다. 문장은 표현식 이거나 키워드를 사용하는 여러 가지 구조물 중의 하나다. 가령 `if`, `while`, `for`.

struct sequence (구조체 시퀀스)

  A tuple with named elements. Struct sequences expose an interface similar to named tuple in that elements can be accessed either by index or as an attribute. However, they do not have any of the named tuple methods like `_make()` or `_asdict()`. Examples of struct sequences include `sys.float_info` and the return value of `os.stat()`.

text encoding (텍스트 인코딩)

  유니코드 문자열을 바이트열로 인코딩하는 코덱.

text file (텍스트 파일)

  `str` 객체를 읽고 쓸 수 있는 파일 객체. 종종, 텍스트 파일은 실제로는 바이트 지향 데이터스트림을 액세스하고 텍스트 인코딩 을 자동 처리한다. 텍스트 파일의 예로는 텍스트 모드 (`'r'` 또는 `'w'`) 로 열린 파일, `sys.stdin`, `sys.stdout`, `io.StringIO` 의 인스턴스를 들 수 있다.

  바이트열류 객체 를 읽고 쓸 수 있는 파일 객체에 대해서는 바이너리 파일 도 참조하세요.

triple-quoted string (삼중 따옴표 된 문자열)

  따옴표 (《) 나 작은따옴표 (〈) 세 개로 둘러싸인 문자열. 그냥 따옴표 하나로 둘러싸인 문자열에 없는 기능을 제공하지는 않지만, 여러 가지 이유에서 쓸모가 있다. 이스케이프 되지 않은 작은따옴표나 큰따옴표를 문자열 안에 포함할 수 있도록 하고, 연결 문자를 쓰지 않고도 여러 줄에 걸칠 수 있는데, 독스트링을 쓸 때 특히 쓸모 있다.

type (형)

  파이썬 객체의 형은 그것이 어떤 종류의 객체인지를 결정한다; 모든 객체는 형이 있다. 객체의 형은 `__class__` 어트리뷰트로 액세스할 수 있거나 `type(obj)` 로 얻을 수 있다.

type alias

  A synonym for a type, created by assigning the type to an identifier.

  Type aliases are useful for simplifying type hints. For example:

      from typing import List, Tuple

      def remove_gray_shades(
              colors: List[Tuple[int, int, int]]) -> List[Tuple[int, int, int]]:
          pass

  could be made more readable like this:

      from typing import List, Tuple

      Color = Tuple[int, int, int]

      def remove_gray_shades(colors: List[Color]) -> List[Color]:
          pass

  See `typing` and PEP 484, which describe this functionality.

type hint

  An annotation that specifies the expected type for a variable, a class attribute, or a function parameter or return value.

  Type hints are optional and are not enforced by Python but they are useful to static type analysis tools, and aid IDEs with code completion and refactoring.

  Type hints of global variables, class attributes, and functions, but not local variables, can be accessed using `typing.get_type_hints()`.

  See `typing` and PEP 484, which describe this functionality.

universal newlines (유니버설 줄 넘김)

  다음과 같은 것들을 모두 줄의 끝으로 인식하는, 텍스트 스트림을 해석하는 태도: 유닉스 개행 문자 관례 `'\n'`, 윈도우즈 관례 `'\r\n'`, 예전의 매킨토시 관례 `'\r'`. 추가적인 사용에 관해서는 `bytes.splitlines()` 뿐만 아니라 PEP 278 와 PEP 3116 도 보세요.

variable annotation (변수 어노테이션)

  An annotation of a variable or a class attribute.

  When annotating a variable or a class attribute, assignment is optional:

      class C:
          field: 'annotation'

  Variable annotations are usually used for type hints: for example this variable is expected to take `int` values:

      count: int = 0

  Variable annotation syntax is explained in section 어노테이트된 대입문(Annotated assignment statements).

  See function annotation, PEP 484 and PEP 526, which describe this functionality.

virtual environment (가상 환경)

  파이썬 사용자와 응용 프로그램이, 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않으면서, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는, 협력적으로 격리된 실행 환경.

  `venv` 도 보세요.

virtual machine (가상 기계)

  소프트웨어만으로 정의된 컴퓨터. 파이썬의 가상 기계는 바이트 코드 컴파일러가 출력하는 바이트 코드 를 실행한다.

Zen of Python (파이썬 젠)

  파이썬 디자인 원리와 철학들의 목록인데, 인어를 이해하고 사용하는 데 도움이 된다. 이 목록은 대화형 프롬프트에서 《`import this`》 를 입력하면 보인다.