파이썬 3.5의 새로운 기능¶
- 편집자
Elvis Pranskevichus <elvis@magic.io>, Yury Selivanov <yury@magic.io>
이 기사에서는 3.4과 비교하여 파이썬 3.5의 새로운 기능에 관해 설명합니다. 파이썬 3.5는 2015년 9월 13일에 출시되었습니다. 전체 변경 사항 목록은 changelog를 참조하십시오.
더 보기
PEP 478 - 파이썬 3.5 출시 일정
요약 -- 배포 주요 사항¶
새로운 문법 기능:
새로운 라이브러리 모듈:
새로운 내장 기능:
bytes % args
,bytearray % args
: PEP 461 -- bytes와 bytearray에%
포매팅 추가.새로운
bytes.hex()
,bytearray.hex()
및memoryview.hex()
메서드. (Contributed by Arnon Yaari in bpo-9951.)memoryview
는 이제 튜플 인덱싱(다차원 포함)을 지원합니다. (Contributed by Antoine Pitrou in bpo-23632.)제너레이터에는
yield from
표현식에 의해 이터레이션 중인 객체를 반환하는 새로운gi_yieldfrom
어트리뷰트가 있습니다. (Contributed by Benno Leslie and Yury Selivanov in bpo-24450.)이제 최대 재귀 깊이에 도달하면 새로운
RecursionError
예외가 발생합니다. (Contributed by Georg Brandl in bpo-19235.)
CPython 구현 개선:
LC_TYPE
로케일이 POSIX 로케일(C
로케일)일 때,sys.stdin
과sys.stdout
은 이제strict
에러 처리기 대신surrogateescape
에러 처리기를 사용합니다. (Contributed by Victor Stinner in bpo-19977.).pyo
파일은 더는 사용되지 않으며.pyc
이름에 명시적으로 최적화 수준을 포함하는 더 유연한 체계로 대체되었습니다. (PEP 488 개요를 참조하십시오.)내장과 확장 모듈은 이제 파이썬 모듈이 로드되는 방식과 유사한 다단계 절차로 초기화됩니다. (PEP 489 개요를 참조하십시오.)
표준 라이브러리의 현저한 개선:
collections.OrderedDict
는 이제 C로 구현되어서 4 에서 100배 더 빠릅니다.ssl
모듈은 네트워크 IO에서 SSL 프로토콜 처리를 분리하는 메모리 BIO 지원을 얻었습니다.새로운
os.scandir()
함수는 디렉터리 순회의 더 좋고 훨씬 더 빠른 방법을 제공합니다.functools.lru_cache()
는 대부분 C로 재구현되어서 훨씬 더 나은 성능을 제공합니다.새로운
subprocess.run()
함수는 서브 프로세스를 실행하는 간소화된 방법을 제공합니다.
보안 향상:
SSLv3은 이제 표준 라이브러리 전체에서 비활성화됩니다.
ssl.SSLContext
를 수동으로 인스턴스 화하여 여전히 활성화 할 수 있습니다. (자세한 내용은 bpo-22638을 참조하십시오; 이 변경 사항은 CPython 3.4와 2.7로 역 이식되었습니다.)HTTP 쿠키 구문 분석은 이제 잠재적인 주입 공격으로부터 보호하기 위해 더 엄격해졌습니다. (Contributed by Antoine Pitrou in bpo-22796.)
윈도우 개선:
윈도우 용 새 설치 프로그램이 이전 MSI를 대체했습니다. 자세한 정보는 윈도우에서 파이썬 사용하기를 참조하십시오.
윈도우 빌드는 이제 Microsoft Visual C++ 14.0을 사용하고, 확장 모듈은 같은 것을 사용해야 합니다.
다른 많은 소규모 개선 사항, CPython 최적화, 폐지 및 잠재적 이식 문제를 포함하여, 사용자가 직면하는 변경 사항의 포괄적인 목록을 읽으십시오.
새로운 기능¶
PEP 492 - async와 await 구문을 사용하는 코루틴¶
PEP 492는 어웨이터블 객체, 코루틴 함수, 비동기 이터레이션 및 비동기 컨텍스트 관리자를 추가하여 파이썬에서 비동기 프로그래밍에 대한 지원을 크게 향상합니다.
코루틴 함수는 새로운 async def
구문을 사용하여 선언됩니다:
>>> async def coro():
... return 'spam'
코루틴 함수 내에서 새로운 await
표현식을 사용하여 결과를 사용할 수 있을 때까지 코루틴 실행을 중단 할 수 있습니다. __await__()
메서드를 정의하여 어웨이터블 프로토콜을 구현하는 한 모든 객체는 await 될 수 있습니다.
PEP 492는 또한 비동기 이터러블에 대한 편리한 이터레이션을 위해 async for
문을 추가합니다.
새로운 구문을 사용하여 작성된 기본 HTTP 클라이언트의 예:
import asyncio
async def http_get(domain):
reader, writer = await asyncio.open_connection(domain, 80)
writer.write(b'\r\n'.join([
b'GET / HTTP/1.1',
b'Host: %b' % domain.encode('latin-1'),
b'Connection: close',
b'', b''
]))
async for line in reader:
print('>>>', line)
writer.close()
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(http_get('example.com'))
finally:
loop.close()
비동기 이터레이션과 마찬가지로, 비동기 컨텍스트 관리자를 위한 새로운 구문이 있습니다. 다음 스크립트:
import asyncio
async def coro(name, lock):
print('coro {}: waiting for lock'.format(name))
async with lock:
print('coro {}: holding the lock'.format(name))
await asyncio.sleep(1)
print('coro {}: releasing the lock'.format(name))
loop = asyncio.get_event_loop()
lock = asyncio.Lock()
coros = asyncio.gather(coro(1, lock), coro(2, lock))
try:
loop.run_until_complete(coros)
finally:
loop.close()
는 다음을 출력합니다:
coro 2: waiting for lock
coro 2: holding the lock
coro 1: waiting for lock
coro 2: releasing the lock
coro 1: holding the lock
coro 1: releasing the lock
async for
와 async with
는 모두 async def
로 선언된 코루틴 함수 내에서만 사용할 수 있음에 유의하십시오.
코루틴 함수는 asyncio loop와 같은 호환 가능한 이벤트 루프 내에서 실행되도록 설계되었습니다.
참고
버전 3.5.2에서 변경: CPython 3.5.2부터 __aiter__
는 비동기 이터레이터를 직접 반환 할 수 있습니다. 어웨이터블 객체를 반환하면 PendingDeprecationWarning
이 발생합니다.
비동기 이터레이터(Asynchronous Iterators) 설명서 섹션에서 자세한 내용을 참조하십시오.
더 보기
- PEP 492 -- async와 await 구문을 사용하는 코루틴
Yury Selivanov가 작성하고 구현한 PEP.
PEP 465 - 행렬 곱셈을 위한 전용 중위(infix) 연산자¶
PEP 465는 행렬 곱셈을 위한 @
중위(infix) 연산자를 추가합니다. 현재, 내장 파이썬 형은 어느 것도 새 연산자를 구현하지 않지만, 일반, 뒤집힌 및 증분 행렬 곱셈에 대해 __matmul__()
, __rmatmul__()
및 __imatmul__()
를 정의하여 구현할 수 있습니다. 이러한 메서드의 의미는 다른 중위 산술 연산자를 정의하는 메서드의 의미와 유사합니다.
행렬 곱셈은 수학, 과학, 공학의 많은 분야에서 매우 일반적인 연산이며, @
를 추가하면 더 깨끗한 코드를 작성할 수 있습니다:
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
이렇게 작성하는 대신에:
S = dot((dot(H, beta) - r).T,
dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))
NumPy 1.10은 새 연산자를 지원합니다:
>>> import numpy
>>> x = numpy.ones(3)
>>> x
array([ 1., 1., 1.])
>>> m = numpy.eye(3)
>>> m
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> x @ m
array([ 1., 1., 1.])
더 보기
- PEP 465 -- 행렬 곱셈을 위한 전용 중위(infix) 연산자
Nathaniel J. Smith가 작성한 PEP; Benjamin Peterson이 구현했습니다.
PEP 448 - 추가적인 언 패킹 일반화¶
PEP 448은 *
이터러블 언 패킹 연산자와 **
딕셔너리 언 패킹 연산자의 허용된 사용을 확장합니다. 이제 함수 호출에서 임의의 수의 언 패킹을 사용할 수 있습니다:
>>> print(*[1], *[2], 3, *[4, 5])
1 2 3 4 5
>>> def fn(a, b, c, d):
... print(a, b, c, d)
...
>>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4
마찬가지로, 튜플, 리스트, 집합 및 딕셔너리 디스플레이는 여러 번의 언 패킹을 허용합니다 (표현식 목록(Expression lists)과 딕셔너리 디스플레이를 참조하십시오):
>>> *range(4), 4
(0, 1, 2, 3, 4)
>>> [*range(4), 4]
[0, 1, 2, 3, 4]
>>> {*range(4), 4, *(5, 6, 7)}
{0, 1, 2, 3, 4, 5, 6, 7}
>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}
더 보기
- PEP 448 -- 추가적인 언 패킹 일반화
Joshua Landau가 작성한 PEP; Neil Girdhar, Thomas Wouters 및 Joshua Landau가 구현했습니다.
PEP 461 - bytes와 bytearray를 위한 퍼센트 포매팅 지원¶
PEP 461은 bytes
와 bytearray
에 %
보간 연산자에 대한 지원을 추가합니다.
보간은 일반적으로 문자열 연산으로 간주하지만, bytes
나 bytearrays
에 대한 보간이 적절한 경우가 있고, 이 누락 된 기능을 보완하는 데 필요한 작업이 코드의 전반적인 가독성을 떨어뜨립니다. 이 문제는 종종 바이너리와 ASCII 호환 텍스트가 혼합된 전송 형식(wire format) 프로토콜을 다룰 때 특히 중요합니다.
예:
>>> b'Hello %b!' % b'World'
b'Hello World!'
>>> b'x=%i y=%f' % (1, 2.5)
b'x=1 y=2.500000'
유니코드는 %b
에 허용되지 않지만, %a
에서 허용됩니다 (repr(obj).encode('ascii', 'backslashreplace')
와 동등합니다):
>>> b'Hello %b!' % 'World'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'
>>> b'price: %a' % '10€'
b"price: '10\\u20ac'"
%s
와 %r
변환 유형은, 지원되기는 하지만, 파이썬 2와의 호환성이 필요한 코드 베이스에서만 사용해야 함에 유의하십시오.
더 보기
- PEP 461 -- bytes와 bytearray에 % 포매팅 추가
Ethan Furman이 작성한 PEP; Neil Schemenauer와 Ethan Furman이 구현했습니다.
PEP 484 - 형 힌트¶
함수 어노테이션 구문은 버전 3.0(PEP 3107)부터 파이썬 기능이었지만, 어노테이션의 의미는 정의되지 않은 상태로 남아 있었습니다.
경험에 따르면 대부분 함수 어노테이션은 함수 매개 변수와 반환 값에 형 힌트를 제공하는 데 사용되었습니다. 표준 라이브러리에 형 어노테이션을 위한 기본 정의와 도구가 포함되어 있다면 파이썬 사용자에게 도움이 될 것이 분명해졌습니다.
PEP 484는 어노테이션을 사용할 수 없는 상황에 대한 몇 가지 규칙과 함께 이러한 표준 정의와 도구를 제공하는 잠정적 모듈을 도입합니다.
예를 들어, 다음은 어노테이션에 인자와 반환형이 선언된 간단한 함수입니다:
def greeting(name: str) -> str:
return 'Hello ' + name
이러한 어노테이션은 일반적인 __annotations__
어트리뷰트를 통해 실행 시간에 사용할 수 있지만, 어떤 자동 형 검사도 실행 시간에 일어나지 않습니다. 대신, 별도의 오프라인 형 검사기(예를 들어 mypy)가 필요할 때 소스 코드 분석에 사용되는 것으로 가정합니다.
형 시스템은 공용체(unions), 제네릭 형 및 모든 형과 일치하는 (즉, 대입 가능한) Any
라는 특수형을 지원합니다.
PEP 471 - os.scandir() 함수 -- 더 빠르고 더 나은 디렉터리 이터레이터¶
PEP 471은 표준 라이브러리에 새 디렉터리 이터레이션 함수 os.scandir()
을 추가합니다. 또한, os.walk()
는 이제 scandir
을 사용하여 구현되어, POSIX 시스템에서는 3 에서 5배, 윈도우 시스템에서는 7 에서 20배 더 빠릅니다. 이것은 주로 디렉터리 트리를 탐색하는 데 필요한 os.stat()
호출 수를 크게 줄임으로써 달성됩니다.
또한, scandir
은 파일 이름 리스트 대신에 이터레이터를 반환하므로, 매우 큰 디렉터리를 이터레이션 할 때 메모리 효율성이 향상됩니다.
다음 예제는 '.'
로 시작하지 않는 지정된 path의 모든 파일(디렉터리 제외)을 표시하기 위해 os.scandir()
을 사용하는 간단한 방법을 보여줍니다. entry.is_file()
호출은 일반적으로 추가 시스템 호출을 수행하지 않습니다:
for entry in os.scandir(path):
if not entry.name.startswith('.') and entry.is_file():
print(entry.name)
더 보기
- PEP 471 -- os.scandir() 함수 -- 더 빠르고 더 나은 디렉터리 이터레이터
Victor Stinner의 도움으로 Ben Hoyt가 작성하고 구현한 PEP.
PEP 475: EINTR로 실패한 시스템 호출 재시도¶
errno.EINTR
에러 코드는 I/O를 기다리는 시스템 호출이 시그널에 의해 중단될 때마다 반환됩니다. 이전에는, 이러한 경우에 파이썬이 InterruptedError
를 발생시켰습니다. 이는 파이썬 응용 프로그램을 작성할 때 개발자가 두 가지 선택을 할 수 있음을 의미합니다:
InterruptedError
를 무시합니다.InterruptedError
를 처리하고 모든 호출 지점에서 중단된 시스템 호출을 다시 시작합니다.
첫 번째 옵션은 응용 프로그램이 간헐적으로 실패하도록 합니다. 두 번째 옵션은 코드를 거의 읽을 수 없게 만드는 많은 양의 상용구를 추가합니다. 다음을 비교해 보십시오:
print("Hello World")
와:
while True:
try:
print("Hello World")
break
except InterruptedError:
continue
PEP 475는 EINTR
에서 시스템 호출의 자동 재시도를 구현합니다. 이것은 대부분의 상황에서 사용자 코드에서 EINTR
이나 InterruptedError
를 다루는 부담을 제거하고 표준 라이브러리를 포함한 파이썬 프로그램을 더욱 강인하게 만듭니다. 시스템 호출은 시그널 처리기가 예외를 발생시키지 않는 경우에만 재시도됨에 유의하십시오.
다음은 시그널에 의해 중단될 때 재시도되는 함수 목록입니다:
faulthandler
모듈의 함수들;os
함수:fchdir()
,fchmod()
,fchown()
,fdatasync()
,fstat()
,fstatvfs()
,fsync()
,ftruncate()
,mkfifo()
,mknod()
,open()
,posix_fadvise()
,posix_fallocate()
,pread()
,pwrite()
,read()
,readv()
,sendfile()
,wait3()
,wait4()
,wait()
,waitid()
,waitpid()
,write()
,writev()
;특수한 경우:
os.close()
와os.dup2()
는 이제EINTR
에러를 무시합니다; 시스템 호출은 재시도되지 않습니다 (이유는 PEP를 참조하십시오);select
함수:devpoll.poll()
,epoll.poll()
,kqueue.control()
,poll.poll()
,select()
;socket
클래스의 메서드:accept()
,connect()
(비 블로킹 소켓 제외),recv()
,recvfrom()
,recvmsg()
,send()
,sendall()
,sendmsg()
,sendto()
;
더 보기
- PEP 475 -- EINTR로 실패한 시스템 호출 재시도
Charles-François Natali와 Victor Stinner가 Antoine Pitrou의 도움을 받아 PEP와 구현을 작성했습니다 (프렌치 커넥션).
PEP 479: 제너레이터 내부에서의 StopIteration 처리 변경¶
파이썬 3.4와 이전 버전에서 제너레이터와 StopIteration
의 상호 작용은 때때로 놀랍고, 모호한 버그를 감출 수 있습니다. 이전에는, 제너레이터 함수 내에서 실수로 발생한 StopIteration
이 제너레이터를 구동하는 루프 구성에 의해 이터레이션의 끝으로 해석되었습니다.
PEP 479는 제너레이터의 동작을 변경합니다: 제너레이터 내부에서 StopIteration
예외가 발생하면, 제너레이터 프레임을 종료하기 전에 RuntimeError
로 대체됩니다. 이 변경의 주요 목표는 보호되지 않는 next()
호출이 StopIteration
을 발생시키고 이 때문에 제너레이터가 제어하는 이터레이션이 조용히 종료되도록 하는 상황에서 디버깅을 용이하게 하는 것입니다. 이것은 yield from
구조와 결합할 때 특히 유해합니다.
이는 이전 버전과 호환되지 않는 변경이므로, 새 동작을 사용하려면 __future__ 임포트가 필요합니다:
>>> from __future__ import generator_stop
>>> def gen():
... next(iter([]))
... yield
...
>>> next(gen())
Traceback (most recent call last):
File "<stdin>", line 2, in gen
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: generator raised StopIteration
__future__
임포트가 없으면, 제너레이터 내에서 StopIteration
예외가 발생할 때마다 PendingDeprecationWarning
이 발생합니다.
더 보기
- PEP 479 -- 제너레이터 내부에서의 StopIteration 처리 변경
Chris Angelico와 Guido van Rossum이 작성한 PEP. Chris Angelico, Yury Selivanov 및 Nick Coghlan이 구현했습니다.
PEP 485: 대략적인 동등성을 테스트하는 함수¶
PEP 485는 두 값이 대략 같거나 서로 "가까운"지를 알려주는 math.isclose()
와 cmath.isclose()
함수를 추가합니다. 두 값이 가까운 것으로 간주하는지는 주어진 절대와 상대 허용 오차에 따라 결정됩니다. 상대적 허용 오차는 더 큰 절댓값에 상대적으로 isclose
인자간에 허용되는 최대 차이입니다:
>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, rel_tol=1e-5)
True
>>> math.isclose(a, b, rel_tol=1e-6)
False
절대 허용 오차를 사용하여 두 값을 비교할 수도 있습니다. 이 값은 음수가 아니어야 합니다:
>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, abs_tol=0.00003)
True
>>> math.isclose(a, b, abs_tol=0.00001)
False
더 보기
- PEP 485 -- 대략적인 동등성을 테스트하는 함수
Christopher Barker가 작성한 PEP; Chris Barker와 Tal Einat이 구현했습니다.
PEP 486: 파이썬 런처가 가상 환경을 인식하도록 만들기¶
PEP 486은 윈도우 런처(PEP 397을 참조하십시오)가 활성 가상 환경을 인식하도록 합니다. 기본 인터프리터를 사용하고 VIRTUAL_ENV
환경 변수를 설정하면, 가상 환경의 인터프리터가 사용됩니다.
더 보기
- PEP 486 -- 파이썬 런처가 가상 환경을 인식하도록 만들기
Paul Moore가 작성하고 구현한 PEP.
PEP 488: PYO 파일 제거¶
PEP 488은 .pyo
파일의 개념을 제거합니다. 이는 .pyc
파일이 최적화되지 않은 바이트 코드와 최적화된 바이트 코드를 모두 나타냄을 의미합니다. 바이트 코드 파일을 지속해서 재생성할 필요가 없도록, .pyc
파일은 이제 바이트 코드가 최적화될 때 이름에 선택적 opt-
태그를 갖습니다. 이것은 -O
나 -OO
에서 실행할 때 더는 바이트 코드 파일 이름 충돌이 발생하지 않는 부작용이 있습니다. 따라서, -O
와 -OO
에서 생성된 바이트 코드 파일이 이제 동시에 존재할 수 있습니다. importlib.util.cache_from_source()
는 이러한 변경을 돕기 위해 갱신된 API를 갖습니다.
더 보기
- PEP 488 -- PYO 파일 제거
Brett Cannon이 작성하고 구현한 PEP.
PEP 489: 다단계 확장 모듈 초기화¶
PEP 489는 파이썬 3.4에서 PEP 451이 도입한 2단계 모듈 로딩 메커니즘을 활용하기 위해 확장 모듈 초기화를 갱신합니다.
이 변경으로 인해 ASCII로 제한되지 않고 유효한 식별자를 모듈 이름으로 사용할 수 있는 기능을 포함하여, 확장 모듈의 임포트 의미 체계가 파이썬 소스와 바이트 코드 모듈의 것과 훨씬 더 가까운 새로운 메커니즘을 사용하도록 옵트 인합니다.
더 보기
- PEP 489 -- 다단계 확장 모듈 초기화
Petr Viktorin, Stefan Behnel 및 Nick Coghlan이 작성한 PEP; Petr Viktorin이 구현했습니다.
기타 언어 변경¶
핵심 파이썬 언어에 대한 몇 가지 작은 변경 사항은 다음과 같습니다:
"namereplace"
에러 처리기를 추가했습니다. 이제"backslashreplace"
에러 처리기가 디코딩과 변환에서 작동합니다. (Contributed by Serhiy Storchaka in bpo-19676 and bpo-22286.)-b
옵션은 이제bytes
와int
의 비교에 영향을 줍니다. (Contributed by Serhiy Storchaka in bpo-23681.)새로운 카자흐어
kz1048
과 타지크어koi8_t
코덱. (Contributed by Serhiy Storchaka in bpo-22682 and bpo-22681.)프로퍼티 독스트링은 이제 쓰기 가능합니다. 이것은
collections.namedtuple()
독스트링에 특히 유용합니다. (Contributed by Berker Peksag in bpo-24064.)이제 상대 임포트를 포함하는 순환 임포트가 지원됩니다. (Contributed by Brett Cannon and Antoine Pitrou in bpo-17636.)
새로운 모듈¶
zipapp¶
새로운 (PEP 441에서 지정된) zipapp
모듈은 실행 가능한 파이썬 Zip 응용 프로그램을 만들기 위한 API와 명령 줄 도구를 제공합니다. 실행 가능한 파이썬 Zip 응용 프로그램은 bpo-1739468에서 파이썬 2.6에 도입되었지만, 그때나 그 이후로 잘 공개되지 않았습니다.
새로운 모듈을 사용하면, __main__.py
파일을 포함한 모든 파일을 myapp
디렉터리에 넣고 다음을 실행하는 것만큼 간단하게 응용 프로그램을 번들링 할 수 있습니다:
$ python -m zipapp myapp
$ python myapp.pyz
모듈 구현은 bpo-23491에서 Paul Moore에 의해 기고되었습니다.
더 보기
PEP 441 -- 파이썬 ZIP 응용 프로그램 지원 개선
개선된 모듈¶
argparse¶
ArgumentParser
클래스는 이제 allow_abbrev를 False
로 설정하여 긴 옵션의 약어 사용을 비활성화 할 수 있습니다. (Contributed by Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson in bpo-14910.)
asyncio¶
asyncio
모듈은 잠정적이므로, 파이썬 3.5에 도입된 모든 변경 사항은 파이썬 3.4.x로 역 이식되었습니다.
파이썬 3.4.0 이후 asyncio
모듈의 주목할만한 변경 사항:
새로운 디버깅 API:
loop.set_debug()
와loop.get_debug()
메서드. (Contributed by Victor Stinner.)프로액터(proactor) 이벤트 루프는 이제 SSL을 지원합니다. (Contributed by Antoine Pitrou and Victor Stinner in bpo-22560.)
이벤트 루프가 닫혔는지 확인하는 새로운
loop.is_closed()
메서드. (Contributed by Victor Stinner in bpo-21326.)코루틴을 위한 새로운
Task
를 편리하게 만들고 예약하는 새로운loop.create_task()
.create_task
메서드는 코루틴을 태스크로 감싸는 모든 asyncio 함수(가령asyncio.wait()
,asyncio.gather()
등)에서도 사용됩니다. (Contributed by Victor Stinner.)흐름 제어의 high-와 low- 수위 한계를 조회하는 새로운
transport.get_write_buffer_limits()
메서드. (Contributed by Victor Stinner.)async()
함수는 폐지되었고ensure_future()
로 대체합니다. (Contributed by Yury Selivanov.)loop.create_task()
메서드가 사용하는 태스크 팩토리를 사용자 정의하는 새로운loop.set_task_factory()
와loop.get_task_factory()
메서드. (Contributed by Yury Selivanov.)새로운
Queue.join()
과Queue.task_done()
큐 메서드. (Contributed by Victor Stinner.)JoinableQueue
클래스가 제거되고,asyncio.Queue
클래스로 대체되었습니다. (Contributed by Victor Stinner.)
3.5.1의 업데이트:
ensure_future()
함수와 이를 사용하는 모든 함수(가령loop.run_until_complete()
)는 이제 모든 종류의 어웨이터블 객체를 받아들입니다. (Contributed by Yury Selivanov.)다른 스레드의 이벤트 루프에 코루틴을 제출하는 새로운
run_coroutine_threadsafe()
함수. (Contributed by Vincent Michel.)트랜스포트가 닫히고 있거나 닫혀 있는지 확인하는 새로운
Transport.is_closing()
메서드. (Contributed by Yury Selivanov.)loop.create_server()
메서드는 이제 호스트 리스트를 받아들일 수 있습니다. (Contributed by Yann Sionneau.)
3.5.2의 업데이트 :
Future 객체를 만드는 새로운
loop.create_future()
메서드. 이를 통해 uvloop와 같은 대체 이벤트 루프 구현이 더 빠른asyncio.Future
구현을 제공 할 수 있습니다. (Contributed by Yury Selivanov.)현재 예외 처리기를 가져오는 새로운
loop.get_exception_handler()
메서드. (Contributed by Yury Selivanov.)구분자 바이트 시퀀스가 나타날 때까지 스트림에서 데이터를 읽는 새로운
StreamReader.readuntil()
메서드. (Contributed by Mark Korenberg.)loop.create_connection()
과loop.create_server()
메서드는 주소가 이미 결정된 경우 시스템getaddrinfo
함수를 호출하지 않도록 최적화되었습니다. (Contributed by A. Jesse Jiryu Davis.)loop.sock_connect(sock, address)
는 더는 호출 전에 address를 결정할 필요가 없습니다. (Contributed by A. Jesse Jiryu Davis.)
bz2¶
이제 BZ2Decompressor.decompress
메서드는 압축 해제된 데이터의 최대 크기를 제한하기 위해 선택적 max_length 인자를 받아들입니다. (Contributed by Nikolaus Rath in bpo-15955.)
cmath¶
새로운 함수 isclose()
는 대략적인 동등성을 테스트하는 방법을 제공합니다. (Contributed by Chris Barker and Tal Einat in bpo-24270.)
code¶
InteractiveInterpreter.showtraceback()
메서드는 이제 대화 형 인터프리터처럼 전체 연결된(chained) 트레이스백을 인쇄합니다. (Contributed by Claudiu Popa in bpo-17442.)
collections¶
OrderedDict
클래스는 이제 C로 구현되어 4 에서 100배 더 빨라졌습니다. (Contributed by Eric Snow in bpo-16991.)
OrderedDict.items()
, OrderedDict.keys()
, OrderedDict.values()
뷰는 이제 reversed()
이터레이션을 지원합니다. (Contributed by Serhiy Storchaka in bpo-19505.)
deque
클래스는 이제 index()
, insert()
및 copy()
를 정의하고, +
와 *
연산자를 지원합니다. 이를 통해 데크가 MutableSequence
로 인식되고 리스트에 대한 대체 가능성이 향상됩니다. (Contributed by Raymond Hettinger in bpo-23704.)
이제 namedtuple()
이 생성한 독스트링을 갱신할 수 있습니다:
Point = namedtuple('Point', ['x', 'y'])
Point.__doc__ += ': Cartesian coodinate'
Point.x.__doc__ = 'abscissa'
Point.y.__doc__ = 'ordinate'
(Contributed by Berker Peksag in bpo-24064.)
UserString
클래스는 이제 str
의 해당 메서드와 일치하도록 __getnewargs__()
, __rmod__()
, casefold()
, format_map()
, isprintable()
및 maketrans()
메서드를 구현합니다. (Contributed by Joe Jevnik in bpo-22189.)
collections.abc¶
Sequence.index()
메서드는 이제 tuple
, list
등의 해당 메서드와 일치하도록 start와 stop 인자를 받아들입니다 (Contributed by Devin Jeanpierre in bpo-23086.)
새로운 Generator
추상 베이스 클래스. (Contributed by Stefan Behnel in bpo-24018.)
새로운 Awaitable
, Coroutine
, AsyncIterator
및 AsyncIterable
추상 베이스 클래스. (Contributed by Yury Selivanov in bpo-24184.)
이전 파이썬 버전의 경우, 새 ABC의 역 이식을 외부 PyPI 패키지에서 사용할 수 있습니다.
compileall¶
새로운 compileall
옵션인 -j N
을 사용하면 N 작업자를 동시에 실행하여 병렬 바이트 코드 컴파일을 수행할 수 있습니다. compile_dir()
함수에는 대응하는 workers
매개 변수가 있습니다. (Contributed by Claudiu Popa in bpo-16104.)
또 다른 새로운 옵션인 -r
은 하위 디렉터리에 대한 최대 재귀 수준을 제어할 수 있습니다. (Contributed by Claudiu Popa in bpo-19628.)
이제 -q
명령 줄 옵션을 두 번 이상 지정할 수 있으며, 이 경우 에러를 포함한 모든 출력이 억제됩니다. compile_dir()
, compile_file()
및 compile_path()
의 해당 quiet
매개 변수는 이제 출력 억제 수준을 나타내는 정숫값을 받아들일 수 있습니다. (Contributed by Thomas Kluyver in bpo-21338.)
concurrent.futures¶
Executor.map()
메서드는 이제 chunksize 인자를 받아, ProcessPoolExecutor()
가 사용될 때 작업을 일괄 처리하여 성능을 향상할 수 있습니다. (Contributed by Dan O'Reilly in bpo-11271.)
ThreadPoolExecutor
생성자의 작업자 수는 이제 선택 사항입니다. 기본값은 CPU 수의 5배입니다. (Contributed by Claudiu Popa in bpo-21527.)
configparser¶
configparser
는 이제 ConfigParser
생성자에서 변환기 딕셔너리를 지정하거나 ConfigParser
서브 클래스에서 메서드로 정의하여 값 변환을 사용자 정의하는 방법을 제공합니다. 구문 분석기 인스턴스에 정의된 변환기는 섹션 프락시에 의해 상속됩니다.
예:
>>> import configparser
>>> conv = {}
>>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]
>>> cfg = configparser.ConfigParser(converters=conv)
>>> cfg.read_string("""
... [s]
... list = a b c d e f g
... """)
>>> cfg.get('s', 'list')
'a b c d e f g'
>>> cfg.getlist('s', 'list')
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> section = cfg['s']
>>> section.getlist('list')
['a', 'b', 'c', 'd', 'e', 'f', 'g']
(Contributed by Łukasz Langa in bpo-18159.)
contextlib¶
새로운 redirect_stderr()
컨텍스트 관리자(redirect_stdout()
과 유사)를 사용하면 유틸리티 스크립트가 출력을 sys.stderr
에 기록하고 리디렉션 옵션을 제공하지 않는 유연하지 않은 API를 더 쉽게 처리할 수 있습니다:
>>> import contextlib, io, logging
>>> f = io.StringIO()
>>> with contextlib.redirect_stderr(f):
... logging.warning('warning')
...
>>> f.getvalue()
'WARNING:root:warning\n'
(Contributed by Berker Peksag in bpo-22389.)
csv¶
writerow()
메서드는 이제 시퀀스뿐만 아니라 임의의 이터러블을 지원합니다. (Contributed by Serhiy Storchaka in bpo-23171.)
curses¶
새로운 update_lines_cols()
함수는 LINES
와 COLS
환경 변수를 갱신합니다. 이것은 수동 화면 크기 조정을 감지하는 데 유용합니다. (Contributed by Arnon Yaari in bpo-4254.)
difflib¶
HtmlDiff.make_file()
에 의해 생성된 HTML 문서의 문자 집합은 이제 새로운 charset 키워드 전용 인자를 사용하여 사용자 정의 할 수 있습니다. HTML 문서의 기본 문자 집합이 "ISO-8859-1"
에서 "utf-8"
로 변경되었습니다. (Contributed by Berker Peksag in bpo-2052.)
diff_bytes()
함수는 이제 바이트 문자열 리스트를 비교할 수 있습니다. 이것은 파이썬 2의 회귀를 수리합니다. (Contributed by Terry J. Reedy and Greg Ward in bpo-17445.)
distutils¶
build
와 build_ext
명령은 이제 -j
옵션을 받아들여 확장 모듈의 병렬 빌드를 활성화합니다. (Contributed by Antoine Pitrou in bpo-5309.)
distutils
모듈은 이제 xz
압축을 지원하며, xztar
를 인자로 bdist --format
에 전달하여 활성화 할 수 있습니다. (Contributed by Serhiy Storchaka in bpo-16314.)
doctest¶
DocTestSuite()
함수는 module에 독스트링이 없으면 ValueError
를 발생시키는 대신 빈 unittest.TestSuite
를 반환합니다. (Contributed by Glenn Jones in bpo-15916.)
email¶
새로운 정책 옵션 Policy.mangle_from_
은 생성자가 이메일 본문에서 "From "
으로 시작하는 줄에 ">"
문자를 접두사로 추가할지를 제어합니다. 기본값은 compat32
의 경우 True
이고 다른 모든 정책의 경우 False
입니다. (Contributed by Milan Oberkirch in bpo-20098.)
새로운 Message.get_content_disposition()
메서드를 사용하면 Content-Disposition 헤더의 규범적 값에 쉽게 액세스 할 수 있습니다. (Contributed by Abhilash Raj in bpo-21083.)
새로운 정책 옵션 EmailPolicy.utf8
을 True
로 설정하여 인코딩된 단어를 사용하는 대신 UTF-8 문자 집합을 사용하여 이메일 헤더를 인코딩 할 수 있습니다. 이를 통해 Messages
를 RFC 6532에 따라 포매팅하고 RFC 6531 SMTPUTF8
확장을 지원하는 SMTP 서버와 함께 사용할 수 있습니다. (Contributed by R. David Murray in bpo-24211.)
mime.text.MIMEText
생성자는 이제 charset.Charset
인스턴스를 받아들입니다. (Contributed by Claude Paroz and Berker Peksag in bpo-16324.)
enum¶
Enum
콜러블에는 names만 제공되는 경우 열거형 값의 초기 수를 지정하는 새 매개 변수 start가 있습니다:
>>> Animal = enum.Enum('Animal', 'cat dog', start=10)
>>> Animal.cat
<Animal.cat: 10>
>>> Animal.dog
<Animal.dog: 11>
(Contributed by Ethan Furman in bpo-21706.)
faulthandler¶
enable()
, register()
, dump_traceback()
및 dump_traceback_later()
함수는 이제 파일류 객체 외에도 파일 기술자를 받아들입니다. (Contributed by Wei Wu in bpo-23566.)
functools¶
대부분의 lru_cache()
장치는 이제 C로 구현되어 훨씬 빨라졌습니다. (Contributed by Matt Joiner, Alexey Kachayev, and Serhiy Storchaka in bpo-14373.)
glob¶
iglob()
과 glob()
함수는 이제 "**"
패턴을 사용하여 하위 디렉터리에서 재귀 검색을 지원합니다. (Contributed by Serhiy Storchaka in bpo-13968.)
heapq¶
merge()
의 요소 비교는 이제 새로운 선택적 key 키워드 인자에 키 함수를 전달하여 사용자 정의 할 수 있으며, 새로운 선택적 reverse 키워드 인자를 사용하여 요소 비교를 반전할 수 있습니다:
>>> import heapq
>>> a = ['9', '777', '55555']
>>> b = ['88', '6666']
>>> list(heapq.merge(a, b, key=len))
['9', '88', '777', '6666', '55555']
>>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))
['55555', '6666', '777', '88', '9']
(Contributed by Raymond Hettinger in bpo-13742.)
http¶
HTTP 상태 코드, 이유 구문 및 영어로 작성된 자세한 설명의 집합을 정의하는 새로운 HTTPStatus
열거형. (Contributed by Demian Brecht in bpo-21793.)
http.client¶
HTTPConnection.getresponse()
는 이제 원격 서버 연결이 예기치 않게 닫힐 때 RemoteDisconnected
예외를 발생시킵니다. 또한 ConnectionError
(RemoteDisconnected
는 이것의 서브 클래스입니다)가 발생하면, 클라이언트 소켓이 이제 자동으로 닫히고 다음 요청에 다시 연결됩니다:
import http.client
conn = http.client.HTTPConnection('www.python.org')
for retries in range(3):
try:
conn.request('GET', '/')
resp = conn.getresponse()
except http.client.RemoteDisconnected:
pass
(Contributed by Martin Panter in bpo-3566.)
idlelib 및 IDLE¶
idlelib는 IDLE 셸과 편집기를 구현하고 다른 프로그램에서 임포트 하려는 것이 아니기 때문에, 모든 릴리스에서 개선됩니다. 3.4.0 이후의 누적 변경 사항과 향후 3.5.x 릴리스에서 변경된 사항은 Lib/idlelib/NEWS.txt
를 참조하십시오. 이 파일은 IDLE 대화 상자에서도 제공됩니다.
imaplib¶
IMAP4
클래스는 이제 컨텍스트 관리자 프로토콜을 지원합니다. with
문에서 사용하면 IMAP4 LOGOUT
명령이 블록 끝에서 자동으로 호출됩니다. (Contributed by Tarek Ziadé and Serhiy Storchaka in bpo-4972.)
imaplib
모듈은 이제 IMAP4.enable()
메서드를 통해 RFC 5161(ENABLE 확장) 및 RFC 6855(UTF-8 지원)를 지원합니다. 새로운 IMAP4.utf8_enabled
어트리뷰트는 RFC 6855 지원이 활성화되었는지를 추적합니다. (Contributed by Milan Oberkirch, R. David Murray, and Maciej Szulik in bpo-21800.)
이제 imaplib
모듈은 이제 RFC에서 권장하는 대로 UTF-8을 사용하여 ASCII가 아닌 문자열 사용자 이름과 암호를 자동으로 인코딩합니다. (Contributed by Milan Oberkirch in bpo-21800.)
imghdr¶
what()
함수는 이제 OpenEXR 형식(contributed by Martin Vignali and Claudiu Popa in bpo-20295) 및 WebP 형식(contributed by Fabrice Aneche and Claudiu Popa in bpo-20197)을 인식합니다.
importlib¶
util.LazyLoader
클래스는 시작 소요 시간이 중요한 응용 프로그램에서 모듈의 지연 로드를 허용합니다. (Contributed by Brett Cannon in bpo-17621.)
abc.InspectLoader.source_to_code()
메서드는 이제 정적 메서드입니다. 이렇게 하면 exec(code, module.__dict__)
를 실행하여 문자열에서 컴파일된 코드로 모듈 객체를 더 쉽게 초기화 할 수 있습니다. (Contributed by Brett Cannon in bpo-21156.)
새 util.module_from_spec()
함수는 이제 새 모듈을 만드는 데 선호되는 방법입니다. types.ModuleType
인스턴스를 직접 만드는 것과는 반대로, 이 새로운 함수는 전달된 명세 객체를 기반으로 다양한 임포트 제어 어트리뷰트를 설정합니다. (Contributed by Brett Cannon in bpo-20383.)
inspect¶
Signature
와 Parameter
클래스 모두 이제 피클 가능하고 해시 가능합니다. (Contributed by Yury Selivanov in bpo-20726 and bpo-20334.)
새로운 BoundArguments.apply_defaults()
메서드는 누락 된 인자에 대한 기본값을 설정하는 방법을 제공합니다:
>>> def foo(a, b='ham', *args): pass
>>> ba = inspect.signature(foo).bind('spam')
>>> ba.apply_defaults()
>>> ba.arguments
OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])
(Contributed by Yury Selivanov in bpo-24190.)
새로운 클래스 메서드 Signature.from_callable()
은 Signature
의 서브 클래싱을 더 쉽게 만듭니다. (Contributed by Yury Selivanov and Eric Snow in bpo-17373.)
signature()
함수는 이제 follow_wrapped 선택적 키워드 인자를 받아들이며, False
로 설정되면 __wrapped__
링크의 자동 추적을 비활성화합니다. (Contributed by Yury Selivanov in bpo-20691.)
코루틴 함수와 코루틴 객체를 검사하는 새로운 함수 집합 : iscoroutine()
, iscoroutinefunction()
, isawaitable()
, getcoroutinelocals()
및 getcoroutinestate()
가 추가되었습니다. (Contributed by Yury Selivanov in bpo-24017 and bpo-24400.)
stack()
, trace()
, getouterframes()
및 getinnerframes()
함수는 이제 네임드 튜플 리스트를 반환합니다. (Contributed by Daniel Shahaf in bpo-16808.)
io¶
하부 원시 스트림의 RawIOBase.read()
나 RawIOBase.readinto()
메서드에 대한 호출을 최대 한 번 사용하는 새로운 BufferedIOBase.readinto1()
메서드. (Contributed by Nikolaus Rath in bpo-20578.)
ipaddress¶
IPv4Network
와 IPv6Network
클래스는 이제 기존 주소에서 네트워크 객체를 쉽게 구성할 수 있도록 (address, netmask)
튜플 인자를 받아들입니다:
>>> import ipaddress
>>> ipaddress.IPv4Network(('127.0.0.0', 8))
IPv4Network('127.0.0.0/8')
>>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))
IPv4Network('127.0.0.0/8')
(Contributed by Peter Moody and Antoine Pitrou in bpo-16531.)
IPv4Network
와 IPv6Network
클래스의 새로운 reverse_pointer
어트리뷰트는 역 DNS PTR 레코드의 이름을 반환합니다:
>>> import ipaddress
>>> addr = ipaddress.IPv4Address('127.0.0.1')
>>> addr.reverse_pointer
'1.0.0.127.in-addr.arpa'
>>> addr6 = ipaddress.IPv6Address('::1')
>>> addr6.reverse_pointer
'1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'
(Contributed by Leon Weber in bpo-20480.)
json¶
json.tool
명령 줄 인터페이스는 이제 입력으로 전달된 JSON 객체의 키 순서를 유지합니다. 새로운 --sort-keys
옵션을 사용하여 키를 알파벳순으로 정렬 할 수 있습니다. (Contributed by Berker Peksag in bpo-21650.)
이제 JSON 디코더는 에러에 대한 더 나은 문맥 정보를 제공하기 위해 ValueError
대신 JSONDecodeError
를 발생시킵니다. (Contributed by Serhiy Storchaka in bpo-19361.)
linecache¶
새로운 lazycache()
함수를 사용하여 파일 기반이 아닌 모듈에 대한 정보를 캡처하여 나중에 getline()
을 통해 해당 라인을 가져올 수 있습니다. 이렇게 하면 모듈 전역을 무기한으로 유지할 필요 없이, 실제로 줄이 필요할 때까지 I/O를 수행하지 않습니다. (Contributed by Robert Collins in bpo-17911.)
locale¶
새로운 delocalize()
함수를 사용하여 LC_NUMERIC
설정을 고려하여 문자열을 정규화된 숫자 문자열로 변환 할 수 있습니다:
>>> import locale
>>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
'de_DE.UTF-8'
>>> locale.delocalize('1.234,56')
'1234.56'
>>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.delocalize('1,234.56')
'1234.56'
(Contributed by Cédric Krier in bpo-13918.)
logging¶
모든 로깅 메서드(Logger
log()
, exception()
, critical()
, debug()
등)는 이제 불리언 값과 예외 튜플 외에도 예외 인스턴스를 exc_info 인자로 받아들입니다:
>>> import logging
>>> try:
... 1/0
... except ZeroDivisionError as ex:
... logging.error('exception', exc_info=ex)
ERROR:root:exception
(Contributed by Yury Selivanov in bpo-20537.)
이제 handlers.HTTPHandler
클래스는 HTTP 연결에 사용되는 SSL 설정을 구성하기 위해 선택적 ssl.SSLContext
인스턴스를 받아들입니다. (Contributed by Alex Gaynor in bpo-22788.)
handlers.QueueListener
클래스는 이제 respect_handler_level 키워드 인자를 취합니다. 이 인자는 True
로 설정되면 처리기 수준을 고려하여 처리기에 메시지를 전달합니다. (Contributed by Vinay Sajip.)
lzma¶
이제 LZMADecompressor.decompress()
메서드는 압축 해제된 데이터의 최대 크기를 제한하기 위해 선택적 max_length 인자를 받아들입니다. (Contributed by Martin Panter in bpo-15955.)
math¶
math
모듈에 inf
와 nan
의 두 가지 새로운 상수가 추가되었습니다. (Contributed by Mark Dickinson in bpo-23185.)
새로운 함수 isclose()
는 대략적인 동등성을 테스트하는 방법을 제공합니다. (Contributed by Chris Barker and Tal Einat in bpo-24270.)
새로운 gcd()
함수가 추가되었습니다. fractions.gcd()
함수는 이제 폐지되었습니다. (Contributed by Mark Dickinson and Serhiy Storchaka in bpo-22486.)
multiprocessing¶
sharedctypes.synchronized()
객체는 이제 컨텍스트 관리자 프로토콜을 지원합니다. (Contributed by Charles-François Natali in bpo-21565.)
operator¶
attrgetter()
, itemgetter()
및 methodcaller()
객체는 이제 피클링을 지원합니다. (Contributed by Josh Rosenberg and Serhiy Storchaka in bpo-22955.)
행렬 곱셈을 수행하는 새로운 matmul()
과 imatmul()
함수. (Contributed by Benjamin Peterson in bpo-21176.)
os¶
DirEntry
객체의 이터레이터를 반환하는 새로운 scandir()
함수가 추가되었습니다. 가능하면, scandir()
은 디렉터리를 스캔하는 동안 파일 어트리뷰트를 추출하여, 파일 유형이나 어트리뷰트를 파악하기 위해 후속 시스템 호출을 수행할 필요가 없어서, 성능이 크게 향상될 수 있습니다. (Contributed by Ben Hoyt with the help of Victor Stinner in bpo-22524.)
윈도우에서, 이제 새로운 stat_result.st_file_attributes
어트리뷰트를 사용할 수 있습니다. GetFileInformationByHandle()
이 반환한 BY_HANDLE_FILE_INFORMATION
구조체의 dwFileAttributes
멤버에 해당합니다. (Contributed by Ben Hoyt in bpo-21719.)
urandom()
함수는 이제 리눅스 3.17 이상에서 getrandom()
시스템 호출을 사용하고, OpenBSD 5.6 이상에서 getentropy()
를 사용하여, /dev/urandom
을 사용할 필요가 없고 잠재적인 파일 기술자 고갈로 인한 실패를 방지합니다. (Contributed by Victor Stinner in bpo-22181.)
새로운 get_blocking()
과 set_blocking()
함수를 사용하여 파일 기술자의 블로킹 모드(O_NONBLOCK
)를 가져오고 설정할 수 있습니다 (Contributed by Victor Stinner in bpo-22054.)
이제 truncate()
와 ftruncate()
함수가 이제 윈도우에서 지원됩니다. (Contributed by Steve Dower in bpo-23668.)
전달된 각 경로명의 가장 긴 공통 하위 경로를 반환하는 새로운 os.path.commonpath()
함수가 있습니다. os.path.commonprefix()
함수와 달리, 항상 유효한 경로를 반환합니다:
>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
'/usr/l'
>>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
'/usr'
(Contributed by Rafik Draoui and Serhiy Storchaka in bpo-10395.)
pathlib¶
새로운 Path.samefile()
메서드를 사용하여 다른 Path
객체나 문자열일 수 있는 다른 경로와 같은 파일을 가리키는지를 확인할 수 있습니다:
>>> import pathlib
>>> p1 = pathlib.Path('/etc/hosts')
>>> p2 = pathlib.Path('/etc/../etc/hosts')
>>> p1.samefile(p2)
True
(Contributed by Vajrasky Kok and Antoine Pitrou in bpo-19775.)
Path.mkdir()
메서드는 이제 mkdir -p
와 os.makedirs()
기능과 일치하는 새로운 선택적 exist_ok 인자를 받아들입니다. (Contributed by Berker Peksag in bpo-21539.)
~
와 ~user
접두사를 확장하는 새로운 Path.expanduser()
메서드가 있습니다. (Contributed by Serhiy Storchaka and Claudiu Popa in bpo-19776.)
새로운 Path.home()
클래스 메서드를 사용하여 사용자의 홈 디렉터리를 나타내는 Path
인스턴스를 가져올 수 있습니다. (Contributed by Victor Salgado and Mayank Tripathi in bpo-19777.)
파일에 대한 읽기/쓰기 연산을 단순화하는 새로운 Path.write_text()
, Path.read_text()
, Path.write_bytes()
, Path.read_bytes()
메서드.
다음 코드 조각은 ~/spam42
를 만들거나 기존 파일을 다시 작성합니다:
>>> import pathlib
>>> p = pathlib.Path('~/spam42')
>>> p.expanduser().write_text('ham')
3
(Contributed by Christopher Welborn in bpo-20218.)
pickle¶
연결되지 않은 메서드나 중첩된 클래스와 같은 중첩 된 객체는 이제 프로토콜 버전 4보다 오래된 피클 프로토콜을 사용하여 피클 할 수 있습니다. 프로토콜 버전 4는 이미 이러한 경우를 지원합니다. (Contributed by Serhiy Storchaka in bpo-23611.)
poplib¶
새로운 POP3.utf8()
명령은 POP 서버가 지원하면 RFC 6856 (국제화된 이메일) 지원을 활성화합니다. (Contributed by Milan OberKirch in bpo-21804.)
re¶
고정 길이를 가진 그룹에 대한 참조와 조건부 참조는 이제 되돌아보기 어서션(lookbehind assertions)에서 허용됩니다:
>>> import re
>>> pat = re.compile(r'(a|b).(?<=\1)c')
>>> pat.match('aac')
<_sre.SRE_Match object; span=(0, 3), match='aac'>
>>> pat.match('bbc')
<_sre.SRE_Match object; span=(0, 3), match='bbc'>
(Contributed by Serhiy Storchaka in bpo-9179.)
정규식의 캡처 그룹 수는 더는 100개로 제한되지 않습니다. (Contributed by Serhiy Storchaka in bpo-22437.)
sub()
와 subn()
함수는 이제 예외를 발생시키는 대신 일치하지 않는 그룹을 빈 문자열로 대체합니다. (Contributed by Serhiy Storchaka in bpo-1519638.)
re.error
예외에는 에러에 대한 더 나은 문맥 정보를 제공하는 새 어트리뷰트인 msg
, pattern
, pos
, lineno
및 colno
가 있습니다:
>>> re.compile("""
... (?x)
... .++
... """)
Traceback (most recent call last):
...
sre_constants.error: multiple repeat at position 16 (line 3, column 7)
(Contributed by Serhiy Storchaka in bpo-22578.)
readline¶
새로운 append_history_file()
함수를 사용하여 지정된 파일에 히스토리에 지정된 수의 후행 요소를 추가 할 수 있습니다. (Contributed by Bruno Cauet in bpo-22940.)
selectors¶
새로운 DevpollSelector
는 Solaris에서 효율적인 /dev/poll
폴링을 지원합니다. (Contributed by Giampaolo Rodola' in bpo-18931.)
Shutil¶
move()
함수는 이제 copy_function 인자를 받아들여, 예를 들어, 이동할 때 파일 메타 데이터를 무시해야 하면 기본 copy2()
대신 copy()
함수를 사용할 수 있습니다. (Contributed by Claudiu Popa in bpo-19840.)
make_archive()
함수는 이제 xztar 형식을 지원합니다. (Contributed by Serhiy Storchaka in bpo-5411.)
signal¶
윈도우에서, set_wakeup_fd()
함수는 이제 소켓 핸들도 지원합니다. (Contributed by Victor Stinner in bpo-22018.)
signal
모듈의 다양한 SIG*
상수가 열거형
으로 변환되었습니다. 이를 통해 디버깅 중에 정수 "매직 넘버" 대신 의미 있는 이름을 인쇄할 수 있습니다. (Contributed by Giampaolo Rodola' in bpo-21076.)
smtpd¶
이제 SMTPServer
와 SMTPChannel
클래스 모두 decode_data 키워드 인자를 받아 SMTP 트랜잭션의 DATA
부분이 "utf-8"
코덱을 사용하여 디코딩되는지 아니면 대신 바이트 문자열로 SMTPServer.process_message()
메서드에 제공되는지 확인합니다. 이전 버전과의 호환성을 위해 기본값은 True
이지만, 파이썬 3.6에서는 False
로 변경됩니다. decode_data가 False
로 설정되면, process_message
메서드는 키워드 인자를 받아들일 준비가 되어 있어야 합니다. (Contributed by Maciej Szulik in bpo-19662.)
decode_data가 True
로 설정되면 SMTPServer
클래스는 이제 8BITMIME
확장(RFC 6152)을 알립니다. 클라이언트가 MAIL
명령에 BODY=8BITMIME
를 지정하면, mail_options 키워드를 통해 SMTPServer.process_message()
로 전달됩니다. (Contributed by Milan Oberkirch and R. David Murray in bpo-21795.)
SMTPServer
클래스는 이제 SMTPUTF8
확장(RFC 6531: 국제화된 이메일)도 지원합니다. 클라이언트가 MAIL
명령에 SMTPUTF8 BODY=8BITMIME
을 지정하면, mail_options 키워드를 통해 SMTPServer.process_message()
로 전달됩니다. SMTPUTF8
데이터를 올바르게 처리하는 것은 process_message
메서드의 책임입니다. (Contributed by Milan Oberkirch in bpo-21725.)
이제 SMTPServer
생성자에 직접 또는 이름 결정(name resolution)을 통해 IPv6 주소를 제공하고 성공적으로 연결할 수 있습니다. (Contributed by Milan Oberkirch in bpo-14758.)
smtplib¶
새로운 SMTP.auth()
메서드는 사용자 정의 인증 메커니즘을 구현하는 편리한 방법을 제공합니다. (Contributed by Milan Oberkirch in bpo-15014.)
SMTP.set_debuglevel()
메서드는 이제 디버그 메시지에서 타임 스탬프를 활성화하는 추가 디버그 수준(2)을 받아들입니다. (Contributed by Gavin Chappell and Maciej Szulik in bpo-16914.)
SMTP.sendmail()
과 SMTP.send_message()
메서드 모두 이제 RFC 6531(SMTPUTF8)을 지원합니다. (Contributed by Milan Oberkirch and R. David Murray in bpo-22027.)
sndhdr¶
what()
과 whathdr()
함수는 이제 namedtuple()
을 반환합니다. (Contributed by Claudiu Popa in bpo-18615.)
socket¶
제한 시간이 있는 함수는 이제 시스템 시계 대신 단조증가(monotonic) 시계를 사용합니다. (Contributed by Victor Stinner in bpo-22043.)
새로운 socket.sendfile()
메서드를 사용하면 유닉스에서 고성능 os.sendfile()
함수를 사용하여 소켓을 통해 파일을 전송할 수 있어서, 일반 socket.send()
를 사용할 때 보다 업로드 속도가 2 에서 3배 빨라집니다. (Contributed by Giampaolo Rodola' in bpo-17552.)
socket.sendall()
메서드는 더는 바이트를 받거나 보낼 때마다 소켓 시간제한을 재설정하지 않습니다. 소켓 시간제한은 이제 모든 데이터를 보내는 최대 총 기간입니다. (Contributed by Victor Stinner in bpo-23853.)
socket.listen()
메서드의 backlog 인자는 이제 선택 사항입니다. 기본적으로 SOMAXCONN
나 128
중 작은 값으로 설정됩니다. (Contributed by Charles-François Natali in bpo-21455.)
ssl¶
메모리 BIO 지원¶
(Contributed by Geert Jansen in bpo-21965.)
새로운 SSLObject
클래스가 추가되어 SSLSocket
의 네트워크 I/O 기능이 필요하지 않거나 최적이 아닐 때 SSL 프로토콜 지원을 제공합니다. SSLObject
는 SSL 프로토콜 인스턴스를 나타내지만, 네트워크 I/O 메서드를 구현하지 않고 대신 메모리 버퍼 인터페이스를 제공합니다. 새로운 MemoryBIO
클래스는 파이썬과 SSL 프로토콜 인스턴스 간에 데이터를 전달하는 데 사용할 수 있습니다.
메모리 BIO SSL 지원은 주로 SSLSocket
의 준비(readiness) 모델 ("select/poll")이 비효율적인 비동기 I/O를 구현하는 프레임워크에서 사용하기 위한 것입니다.
새 SSLContext.wrap_bio()
메서드를 사용하여 새 SSLObject
인스턴스를 만들 수 있습니다.
응용 프로그램 계층 프로토콜 협상 지원¶
(Contributed by Benjamin Peterson in bpo-20188.)
OpenSSL 지원이 있는 경우, ssl
모듈은 이제 RFC 7301에 설명된 대로 응용 프로그램 계층 프로토콜 협상(Application-Layer Protocol Negotiation) TLS 확장을 구현합니다.
새로운 SSLContext.set_alpn_protocols()
는 소켓이 TLS 핸드 셰이크 중에 어떤 프로토콜을 알려야 하는지 지정하는 데 사용할 수 있습니다.
새로운 SSLSocket.selected_alpn_protocol()
은 TLS 핸드 셰이크 중에 선택된 프로토콜을 반환합니다. HAS_ALPN
플래그는 ALPN 지원이 있는지를 나타냅니다.
기타 변경 사항¶
사용 중인 실제 프로토콜 버전을 조회하는 새로운 SSLSocket.version()
메서드가 있습니다. (Contributed by Antoine Pitrou in bpo-20421.)
SSLSocket
클래스는 이제 SSLSocket.sendfile()
메서드를 구현합니다. (Contributed by Giampaolo Rodola' in bpo-17552.)
SSLSocket.send()
메서드는 이제 연산이 블록 되려고 하면 비 블로킹 소켓에서 ssl.SSLWantReadError
나 ssl.SSLWantWriteError
예외를 발생시킵니다. 이전에는 0
을 반환했습니다. (Contributed by Nikolaus Rath in bpo-20951.)
cert_time_to_seconds()
함수는 이제 입력 시간을 RFC 5280에 따라 현지 시간이 아닌 UTC로 해석합니다. 또한, 반환 값은 항상 int
입니다. (Contributed by Akira Li in bpo-19940.)
새로운 SSLObject.shared_ciphers()
와 SSLSocket.shared_ciphers()
메서드는 핸드 셰이크 중에 클라이언트가 보낸 사이퍼 리스트를 반환합니다. (Contributed by Benjamin Peterson in bpo-23186.)
SSLSocket
클래스의 SSLSocket.do_handshake()
, SSLSocket.read()
, SSLSocket.shutdown()
및 SSLSocket.write()
메서드는 더는 바이트를 받거나 보낼 때마다 소켓 시간제한을 재설정하지 않습니다. 소켓 시간제한은 이제 메서드의 최대 총 지속 시간입니다. (Contributed by Victor Stinner in bpo-23853.)
match_hostname()
함수는 이제 IP 주소 일치를 지원합니다. (Contributed by Antoine Pitrou in bpo-23239.)
sqlite3¶
Row
클래스는 이제 시퀀스 프로토콜, 특히 reversed()
이터레이션과 슬라이스 인덱싱을 완전히 지원합니다. (Contributed by Claudiu Popa in bpo-10203; by Lucas Sinclair, Jessica McKellar, and Serhiy Storchaka in bpo-13583.)
subprocess¶
새로운 run()
함수가 추가되었습니다. 지정된 명령을 실행하고 완료된 프로세스를 설명하는 CompletedProcess
객체를 반환합니다. 새 API는 더 일관적이며 이전 파이썬 버전과의 호환성을 유지할 필요가 없는 파이썬 코드에서 서브 프로세스를 호출하는 데 권장되는 접근 방식입니다. (Contributed by Thomas Kluyver in bpo-23342.)
예:
>>> subprocess.run(["ls", "-l"]) # 출력을 잡지 않습니다
CompletedProcess(args=['ls', '-l'], returncode=0)
>>> subprocess.run("exit 1", shell=True, check=True)
Traceback (most recent call last):
...
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')
sys¶
새로운 set_coroutine_wrapper()
함수를 사용하면 async def
함수에 의해 코루틴 객체가 만들어질 때마다 호출되는 전역 훅을 설정할 수 있습니다. 해당 get_coroutine_wrapper()
를 사용하여 현재 설정된 래퍼를 얻을 수 있습니다. 두 함수 모두 잠정적이며 디버깅 목적으로만 사용됩니다. (Contributed by Yury Selivanov in bpo-24017.)
새로운 is_finalizing()
함수를 사용하여 파이썬 인터프리터가 종료 중인지 확인할 수 있습니다. (Contributed by Antoine Pitrou in bpo-22696.)
sysconfig¶
이제 윈도우의 사용자 스크립트 디렉터리 이름에 파이썬 버전의 처음 두 구성 요소가 포함됩니다. (Contributed by Paul Moore in bpo-23437.)
tarfile¶
open()
함수의 mode 인자는 이제 배타적 생성을 요청하는 "x"
를 받아들입니다. (Contributed by Berker Peksag in bpo-21717.)
TarFile.extractall()
과 TarFile.extract()
메서드는 이제 키워드 인자 numeric_owner를 취합니다. True
로 설정하면, 압축을 푼 파일과 디렉터리는 tar 파일의 숫자 uid
와 gid
가 소유합니다. False
(기본값, 또한 3.5 이전 버전의 동작)로 설정하면, tar 파일의 명명된 사용자와 그룹이 소유합니다. (Contributed by Michael Vogt and Eric Smith in bpo-23193.)
TarFile.list()
는 이제 TarFile.getmembers()
가 반환하는 리스트의 부분 집합으로 설정할 수 있는 선택적 members 키워드 인자를 받아들입니다. (Contributed by Serhiy Storchaka in bpo-21549.)
threading¶
이제 Lock.acquire()
와 RLock.acquire()
메서드 모두 시간제한 관리에 단조증가(monotonic) 시계를 사용합니다. (Contributed by Victor Stinner in bpo-22043.)
time¶
monotonic()
함수는 이제 항상 사용할 수 있습니다. (Contributed by Victor Stinner in bpo-22043.)
timeit¶
새로운 명령 줄 옵션 -u
나 --unit=U
를 사용하여 타이머 출력의 시간 단위를 지정할 수 있습니다. 지원되는 옵션은 usec
, msec
또는 sec
입니다. (Contributed by Julian Gindi in bpo-18983.)
timeit()
함수에는 코드가 실행될 이름 공간을 지정하기 위한 새로운 globals 매개 변수가 있습니다. (Contributed by Ben Roberts in bpo-2527.)
tkinter¶
윈도우에서 Tcl/Tk 환경을 설정하는 데 사용되는 tkinter._fix
모듈은 환경 변수를 영구적으로 변경하지 않는 _tkinter
모듈의 내부 함수로 대체되었습니다. (Contributed by Zachary Ware in bpo-20035.)
traceback¶
새로운 walk_stack()
과 walk_tb()
함수로 프레임과 트레이스백 객체를 편리하게 탐색 할 수 있습니다. (Contributed by Robert Collins in bpo-17911.)
새로운 경량 클래스: TracebackException
, StackSummary
및 FrameSummary
. (Contributed by Robert Collins in bpo-17911.)
print_tb()
와 print_stack()
함수는 모두 이제 limit 인자에 대해 음수 값을 지원합니다. (Contributed by Dmitry Kazakov in bpo-22619.)
types¶
제너레이터와 제너레이터류
객체를 어웨이터블로 변환하는 새로운 coroutine()
함수. (Contributed by Yury Selivanov in bpo-24017.)
async def
함수로 만든 코루틴 객체에 사용되는 CoroutineType
라는 새로운 형. (Contributed by Yury Selivanov in bpo-24400.)
unicodedata¶
unicodedata
모듈은 이제 유니코드 8.0.0의 데이터를 사용합니다.
unittest¶
TestLoader.loadTestsFromModule()
메서드는 이제 load_tests
에 세 번째 인자로 전달되는 키워드 전용 인자 pattern을 받아들입니다. 패키지 이름이 기본 패턴과 일치할 수 없어서, 이제 발견된 패키지의 경로가 pattern과 일치하는지와 관계없이 load_tests
를 확인합니다. (Contributed by Robert Collins and Barry A. Warsaw in bpo-16662.)
이제 unittest 디스커버리 에러가 TestLoader
인스턴스의 TestLoader.errors
어트리뷰트에 표시됩니다. (Contributed by Robert Collins in bpo-19746.)
트레이스백에 지역 변수를 표시하는 새로운 명령 줄 옵션 --locals
. (Contributed by Robert Collins in bpo-22936.)
unittest.mock¶
Mock
클래스는 다음과 같이 개선되었습니다:
클래스 생성자에는
"assert"
로 시작하는 어트리뷰트 이름에 대해 모의 객체가AttributeError
를 발생시키는 새로운 unsafe 매개 변수가 있습니다. (Contributed by Kushal Das in bpo-21238.)모의 객체가 호출되었는지 확인하는 새로운
Mock.assert_not_called()
메서드. (Contributed by Kushal Das in bpo-21262.)
MagicMock
클래스는 이제 __truediv__()
, __divmod__()
및 __matmul__()
연산자를 지원합니다. (Contributed by Johannes Baiter in bpo-20968, and Håkan Lövdahl in bpo-23581 and bpo-23568.)
내장 이름을 패치 할 때 더는 create=True
를 patch()
함수에 명시적으로 전달할 필요가 없습니다. (Contributed by Kushal Das in bpo-17660.)
urllib¶
새로운 request.HTTPPasswordMgrWithPriorAuth
클래스는 HTTP 기본 인증 자격 증명을 관리하도록 허용하여, 불필요한 401
응답 처리를 제거하거나, Authorization
헤더가 전송되지 않았으면 401
대신 404
응답을 반환하는 서버와 통신하기 위해 첫 번째 요청에서 자격 증명을 무조건 전송하도록 합니다. (Contributed by Matej Cepl in bpo-19494 and Akshit Khurana in bpo-7159.)
parse.urlencode()
함수에 대한 새로운 quote_via 인자는 필요하면 쿼리 부분의 인코딩을 제어하는 방법을 제공합니다. (Contributed by Samwyse and Arnon Yaari in bpo-13866.)
request.urlopen()
함수는 HTTPS 연결에 사용될 context 인자로 ssl.SSLContext
객체를 받아들입니다. (Contributed by Alex Gaynor in bpo-22366.)
parse.urljoin()
은 상대 URL 확인을 위해 RFC 1808과 RFC 2396 대신에 RFC 3986 의미 체계를 사용하도록 갱신되었습니다. (Contributed by Demian Brecht and Senthil Kumaran in bpo-22118.)
wsgiref¶
headers.Headers
클래스 생성자의 headers 인자는 이제 선택 사항입니다. (Contributed by Pablo Torres Navarrete and SilentGhost in bpo-5800.)
xmlrpc¶
client.ServerProxy
클래스는 이제 컨텍스트 관리자 프로토콜을 지원합니다. (Contributed by Claudiu Popa in bpo-20627.)
client.ServerProxy
생성자는 이제 선택적 ssl.SSLContext
인스턴스를 받아들입니다. (Contributed by Alex Gaynor in bpo-22960.)
xml.sax¶
SAX 구문 분석기는 이제 xmlreader.InputSource
객체의 문자 스트림을 지원합니다. (Contributed by Serhiy Storchaka in bpo-2175.)
parseString()
은 이제 str
인스턴스를 받아들입니다. (Contributed by Serhiy Storchaka in bpo-10590.)
zipfile¶
이제 ZIP 출력을 위치 변경할 수 없는(unseekable) 스트림에 쓸 수 있습니다. (Contributed by Serhiy Storchaka in bpo-23252.)
ZipFile.open()
메서드의 mode 인자는 이제 배타적 생성을 요청하는 "x"
를 받아들입니다. (Contributed by Serhiy Storchaka in bpo-21717.)
기타 모듈 수준 변경¶
mmap
, ossaudiodev
, socket
, ssl
및 codecs
모듈의 많은 함수는 이제 쓰기 가능한 바이트열류 객체를 받아들입니다. (Contributed by Serhiy Storchaka in bpo-23001.)
최적화¶
os.walk()
함수는 POSIX 시스템에서 3 에서 5배, 윈도우에서 7 에서 20배 빨라졌습니다. 이는 하부 readdir
이나 FindFirstFile
/FindNextFile
시스템 호출에서 파일 정보를 노출하는 새로운 os.scandir()
함수를 사용하여 수행되었습니다. (Contributed by Ben Hoyt with help from Victor Stinner in bpo-23605.)
(0 바이트로 채워진) bytes(int)
의 구성이 더 빠르고 큰 객체에 대해 더 적은 메모리를 사용합니다. malloc()
대신 calloc()
을 사용하여 이러한 객체에 대한 메모리를 할당합니다. (Contributed by Victor Stinner in bpo-21233.)
ipaddress
IPv4Network
와 IPv6Network
에 대한 일부 연산(가령 subnets()
, supernet()
, summarize_address_range()
, collapse_addresses()
)이 크게 빨라졌습니다. 속도 향상 범위는 3 에서 15배입니다. (Contributed by Antoine Pitrou, Michel Albert, and Markus in bpo-21486, bpo-21487, bpo-20826, bpo-23266.)
ipaddress
객체의 피클링은 훨씬 더 작은 출력을 생성하도록 최적화되었습니다. (Contributed by Serhiy Storchaka in bpo-23133.)
io.BytesIO
에 대한 많은 연산이 이제 50%에서 100% 더 빨라졌습니다. (Contributed by Serhiy Storchaka in bpo-15381 and David Wilson in bpo-22003.)
이제 marshal.dumps()
함수가 더 빨라졌습니다: 일반 데이터에서는 버전 3과 4에서 65--85%, 버전 0부터 2에서 20--25%, 최상의 경우 최대 5배입니다. (Contributed by Serhiy Storchaka in bpo-20416 and bpo-23344.)
UTF-32 인코더는 이제 3 에서 7배 더 빨라졌습니다. (Contributed by Serhiy Storchaka in bpo-15027.)
이제 정규식이 최대 10% 더 빠르게 구문 분석됩니다. (Contributed by Serhiy Storchaka in bpo-19380.)
json.dumps()
함수는 ensure_ascii=False
로 실행될 때 ensure_ascii=True
와 같이 빠르게 실행되도록 최적화되었습니다. (Contributed by Naoki Inada in bpo-23206.)
PyObject_IsInstance()
와 PyObject_IsSubclass()
함수는 두 번째 인자가 메타 클래스로 type
을 갖는 일반적인 경우에 가속화되었습니다. (Contributed Georg Brandl by in bpo-22540.)
메서드 캐싱이 약간 개선되어, 일부 벤치마크에서 최대 5%의 성능 향상을 가져왔습니다. (Contributed by Antoine Pitrou in bpo-22847.)
random
모듈의 객체는 이제 64비트 빌드에서 50% 적은 메모리를 사용합니다. (Contributed by Serhiy Storchaka in bpo-23488.)
property()
게터 호출은 최대 25% 더 빠릅니다. (Contributed by Joe Jevnik in bpo-23910.)
fractions.Fraction
의 인스턴스 화가 이제 최대 30% 빨라졌습니다. (Contributed by Stefan Behnel in bpo-22464.)
문자열 메서드 find()
, rfind()
, split()
, partition()
및 in
문자열 연산자는 이제 1-문자 하위 문자열을 검색할 때 훨씬 더 빠릅니다. (Contributed by Serhiy Storchaka in bpo-23573.)
빌드와 C API 변경¶
새로운 calloc
함수가 추가되었습니다:
(Contributed by Victor Stinner in bpo-21233.)
새로운 인코딩/디코딩 도우미 함수:
Py_DecodeLocale()
(_Py_char2wchar()
을 대체),Py_EncodeLocale()
(_Py_wchar2char()
을 대체).
(Contributed by Victor Stinner in bpo-18395.)
유니코드 인코딩 에러를 \N{...}
이스케이프로 대체하는 새로운 PyCodec_NameReplaceErrors()
함수. (Contributed by Serhiy Storchaka in bpo-19676.)
PyErr_Format()
과 유사하지만 va_list
인자를 받아들이는 새로운 PyErr_FormatV()
함수. (Contributed by Antoine Pitrou in bpo-18711.)
새로운 PyExc_RecursionError
예외. (Contributed by Georg Brandl in bpo-19235.)
PEP 489 -- 다단계 확장 모듈 초기화에 의해 도입된 새로운 PyModule_FromDefAndSpec()
, PyModule_FromDefAndSpec2()
및 PyModule_ExecDef()
함수. (Contributed by Petr Viktorin in bpo-24268.)
행렬 곱셈을 수행하는 새로운 PyNumber_MatrixMultiply()
와 PyNumber_InPlaceMatrixMultiply()
함수. (Contributed by Benjamin Peterson in bpo-21176. 자세한 내용은 PEP 465를 참조하십시오.)
PyTypeObject.tp_finalize
슬롯은 이제 안정적인 ABI의 일부입니다.
이제 윈도우 빌드에는 Visual Studio 2015의 일부로 제공되는 Microsoft Visual C++ 14.0이 필요합니다.
확장 모듈은 이제 일부 플랫폼에서 파일명에 플랫폼 정보 태그를 포함합니다 (태그는 선택 사항이며, CPython은 태그가 없더라도 확장을 임포트 하지만, 태그가 존재하고 일치하지 않으면 확장이 로드되지 않습니다):
리눅스에서, 확장 모듈 파일명은
.cpython-<major><minor>m-<architecture>-<os>.pyd
로 끝납니다:<major>
는 파이썬 버전의 주 번호입니다; 파이썬 3.5의 경우3
입니다.<minor>
는 파이썬 버전의 부 번호입니다; 파이썬 3.5의 경우5
입니다.<architecture>
는 확장 모듈이 실행되도록 빌드된 하드웨어 아키텍처입니다. 가장 흔하게 32비트 Intel 플랫폼의 경우i386
또는 64비트 Intel (및 AMD) 플랫폼의 경우x86_64
입니다.<os>
는 64비트 플랫폼에서 32비트 ABI와 통신하도록 빌드된 확장을 제외하고 항상linux-gnu
입니다. 이 경우linux-gnu32
(그리고<architecture>
는x86_64
가 됩니다)입니다.
윈도우에서, 확장 모듈 파일명은
<debug>.cp<major><minor>-<platform>.pyd
로 끝납니다:<major>
는 파이썬 버전의 주 번호입니다; 파이썬 3.5의 경우3
입니다.<minor>
는 파이썬 버전의 부 번호입니다; 파이썬 3.5의 경우5
입니다.<platform>
은 확장 모듈이 빌드된 플랫폼으로, Win32 용win32
, Win64 용win_amd64
, 윈도우 Itanium 64 용win_ia64
및 ARM 기반 윈도우 용win_arm
입니다.디버그 모드로 빌드되면,
<debug>
는_d
가 되고 그렇지 않으면 공백이 됩니다.
OS X 플랫폼에서, 확장 모듈 파일명은 이제
-darwin.so
로 끝납니다.다른 모든 플랫폼에서, 확장 모듈 파일명은 파이썬 3.4에서와 같습니다.
폐지¶
새 키워드¶
async
와 await
는 변수, 클래스, 함수 또는 모듈 이름으로 사용하지 않는 것이 좋습니다. 파이썬 3.5에서 PEP 492에 의해 도입되었으며, 파이썬 3.7에서 정식 키워드가 될 것입니다.
폐지된 파이썬 동작¶
제너레이터 내에서 StopIteration
예외를 발생시키면 이제 조용한 PendingDeprecationWarning
을 생성하며, 이는 파이썬 3.6에서 조용하지 않은 폐지 경고가 되고 파이썬 3.7에서 RuntimeError
를 트리거할 것입니다. 자세한 내용은 PEP 479: 제너레이터 내부에서의 StopIteration 처리 변경을 참조하십시오.
폐지된 파이썬 모듈, 함수 및 메서드¶
formatter
모듈은 이제 완전히 폐지되었으며 파이썬 3.6에서 제거될 예정입니다.
asyncio.async()
함수는 폐지되었고 ensure_future()
로 대체합니다.
smtpd
모듈은 과거에 항상 utf-8
코덱을 사용하여 이메일 메시지의 DATA 부분을 디코딩했습니다. 이제 SMTPServer
에 대한 새로운 decode_data 키워드로 제어 할 수 있습니다. 기본값은 True
이지만, 이 기본값은 폐지되었습니다. 폐지 경고를 방지하려면 적절한 값으로 decode_data 키워드를 지정하십시오.
http.cookies.Morsel
객체의 key
, value
및 coded_value
에 값을 직접 대입하는 것은 폐지되었습니다. 대신 set()
메서드를 사용하십시오. 또한, set()
의 문서화되지 않은 LegalChars 매개 변수는 폐지되었으며 이제 무시됩니다.
포맷 문자열을 키워드 인자 format_string으로 string.Formatter
클래스의 format()
메서드에 전달하는 것은 폐지되었습니다. (Contributed by Serhiy Storchaka in bpo-23671.)
platform.dist()
와 platform.linux_distribution()
함수는 이제 폐지되었습니다. 리눅스 배포판은 자신을 설명하는 데 너무 많은 다른 방법을 사용하므로, 기능은 패키지에 남겨집니다. (Contributed by Vajrasky Kok and Berker Peksag in bpo-1322.)
이전에 문서화되지 않은 inspect.Signature
의 from_function
과 from_builtin
메서드는 폐지되었습니다. 대신 새로운 Signature.from_callable()
메서드를 사용하십시오. (Contributed by Yury Selivanov in bpo-24248.)
inspect.getargspec()
함수는 폐지되었으며 파이썬 3.6에서 제거될 예정입니다. (자세한 내용은 bpo-20438을 참조하십시오.)
inspect
getfullargspec()
, getcallargs()
및 formatargspec()
함수는 폐지되었고 inspect.signature()
API로 대체합니다. (Contributed by Yury Selivanov in bpo-20438.)
getargvalues()
와 formatargvalues()
함수는 파이썬 3.5.0 릴리스에서 실수로 폐지된 것으로 표시되었습니다.
str 패턴이나 re.ASCII
와 함께 re.LOCALE
플래그를 사용하는 것은 이제 폐지되었습니다. (Contributed by Serhiy Storchaka in bpo-22407.)
정규식 패턴과 치환 패턴에서 '\'
와 ASCII 문자로 구성된 인식할 수 없는 특수 시퀀스를 사용하면 이제 폐지 경고가 발생하며 파이썬 3.6에서는 금지됩니다. (Contributed by Serhiy Storchaka in bpo-23622.)
unittest.TestLoader.loadTestsFromModule()
메서드의 문서화되지 않고 비공식적인 use_load_tests 기본 인자는 이제 폐지되었으며 무시됩니다. (Contributed by Robert Collins and Barry A. Warsaw in bpo-16662.)
제거¶
API 및 기능 제거¶
다음과 같은 더는 사용되지 않고 이전에 폐지된 API와 기능이 제거되었습니다:
__version__
어트리뷰트가 이메일 패키지에서 삭제되었습니다. 이메일 코드는 오랫동안 표준 라이브러리와 별도로 배포되지 않았으며__version__
문자열은 지난 몇 번의 릴리스에서 갱신되지 않았습니다.ftplib
모듈의 내부Netrc
클래스는 3.4에서 폐지되었으며, 이제 제거되었습니다. (Contributed by Matt Chaput in bpo-6623.).pyo
파일의 개념이 제거되었습니다.잠정적
asyncio
모듈의 JoinableQueue 클래스는 3.4.4에서 폐지되었으며 이제 제거되었습니다. (Contributed by A. Jesse Jiryu Davis in bpo-23464.)
파이썬 3.5로 이식하기¶
이 섹션은 코드 변경이 필요할 수 있는 이전에 설명한 변경 사항과 기타 버그 수정을 나열합니다.
파이썬 동작의 변경¶
부주의로 인해, 이전 파이썬 버전은 다음 문법을 잘못 수락했습니다:
f(1 for x in [1], *args) f(1 for x in [1], **kwargs)
함수에 대한 유일한 인자가 아닌 경우 제너레이터 표현식을 괄호로 묶어야 하므로, 파이썬 3.5는 이제
SyntaxError
를 올바르게 발생시킵니다.
파이썬 API의 변경¶
PEP 475: 시스템 호출은 시그널에 의해 중단될 때 파이썬 시그널 처리기가 예외를 발생시키지 않으면 이제
InterruptedError
를 발생시키는 대신 재시도됩니다.파이썬 3.5 이전에는,
datetime.time
객체가 UTC로 자정을 나타내면 거짓으로 간주했습니다. 이 동작은 모호하고 에러가 발생하기 쉬운 것으로 간주하여 파이썬 3.5에서 제거되었습니다. 자세한 내용은 bpo-13936을 참조하십시오.ssl.SSLSocket.send()
메서드는 이제 연산이 블록 되려고 하면 비 블로킹 소켓에서ssl.SSLWantReadError
나ssl.SSLWantWriteError
를 발생시킵니다. 이전에는0
을 반환했습니다. (Contributed by Nikolaus Rath in bpo-20951.)제너레이터의
__name__
어트리뷰트는 이제 코드 이름에서 설정되는 대신 함수 이름에서 설정됩니다. 코드 이름을 꺼내려면gen.gi_code.co_name
을 사용하십시오. 제너레이터에는 이제 제너레이터의 표현(repr(gen)
)에 사용되는 정규화된 이름인 새로운__qualname__
어트리뷰트도 있습니다. (Contributed by Victor Stinner in bpo-21205.)폐지된 "strict" 모드와
HTMLParser
의 인자,HTMLParser.error()
및HTMLParserError
예외가 제거되었습니다. (Contributed by Ezio Melotti in bpo-15114.)HTMLParser
의 convert_charrefs 인자는 이제 기본적으로True
입니다. (Contributed by Berker Peksag in bpo-21047.)공식적으로 API의 일부는 아니지만, 이전에 "'sometype' does not support the buffer protocol" 형식이었던 에러 메시지는 이제 "a bytes-like object is required, not 'sometype'" 형식임을 이식의 목적(즉: 테스트 수선)을 위해 유의할 필요가 있습니다. (Contributed by Ezio Melotti in bpo-16518.)
현재 디렉터리가 더는 존재하지 않는 디렉터리로 설정되면
FileNotFoundError
가 더는 발생하지 않고 대신find_spec()
이sys.path_importer_cache
에서None
을 캐싱하지 않고None
을 반환합니다. 이는 일반적일 때와 다릅니다 (bpo-22834).http.client
와http.server
의 HTTP 상태 코드와 메시지는 공통HTTPStatus
열거형으로 리팩토링 되었습니다.http.client
와http.server
의 값은 이전 버전과의 호환성을 위해 계속 사용할 수 있습니다. (Contributed by Demian Brecht in bpo-21793.)임포트 로더가
importlib.machinery.Loader.exec_module()
을 정의할 때 이제create_module()
도 정의해야 합니다 (지금은DeprecationWarning
를 발생시키고, 파이썬 3.6에서는 에러가 될 것입니다). 로더가importlib.abc.Loader
에서 상속하면 할 일이 없습니다. 그렇지 않으면 단순히None
을 반환하는create_module()
을 정의합니다. (Contributed by Brett Cannon in bpo-23014.)re.split()
함수는 항상 빈 패턴 일치를 무시해서,"x*"
패턴은"x+"
와 같게 작동하고,"\b"
패턴은 절대 작동하지 않습니다. 이제re.split()
은 패턴이 빈 문자열과 일치 할 수 있으면 경고를 발생시킵니다. 호환성을 위해, 절대 빈 문자열과 일치하지 않는 패턴을 사용하십시오 (예를 들어"x*"
대신"x+"
). 빈 문자열과만 일치 할 수 있는 패턴(가령"\b"
)은 이제 에러를 발생시킵니다. (Contributed by Serhiy Storchaka in bpo-22818.)http.cookies.Morsel
딕셔너리류 인터페이스가 자체 일관성이 있도록 만들었습니다: 이제 Morsel 비교는key
와value
를 고려하고,copy()
는 이제dict
가 아닌Morsel
인스턴스를 생성하며,update()
는 이제 업데이트 딕셔너리의 키 중 하나라도 잘못되면 예외를 발생시킵니다. 또한,set()
의 문서화되지 않은 LegalChars 매개 변수는 폐지되었으며 이제 무시됩니다. (Contributed by Demian Brecht in bpo-2211.)PEP 488은 파이썬에서
.pyo
파일을 제거하고.pyc
파일 이름에 선택적opt-
태그를 도입했습니다.importlib.util.cache_from_source()
는opt-
태그를 제어하는 데 도움이 되는 optimization 매개 변수를 얻었습니다. 이로 인해, 함수의 debug_override 매개 변수는 이제 폐지되었습니다. 또한 .pyo 파일은 더는 파이썬 인터프리터에 대한 파일 인자로 지원되지 않아서 자체적으로 배포될 때 (즉, 소스 없는 코드 배포) 용도가 없습니다. 파이썬 3.5에서 바이트 코드의 매직 넘버가 변경되었기 때문에, 이전 버전의 파이썬에서 가져온 모든 이전 .pyo 파일은 이 PEP에 관계없이 유효하지 않습니다.socket
모듈은 이제 리눅스 3.6 이상에서CAN_RAW_FD_FRAMES
상수를 내보냅니다.ssl.cert_time_to_seconds()
함수는 이제 입력 시간을 RFC 5280에 따라 현지 시간이 아닌 UTC로 해석합니다. 또한, 반환 값은 항상int
입니다. (Contributed by Akira Li in bpo-19940.)pygettext.py
도구는 이제 POT-Creation-Date 헤더의 시간대에 표준 +NNNN 형식을 사용합니다.smtplib
모듈은 이제 디버그 출력을 위해 이전 모듈 수준stderr
변수 대신sys.stderr
을 사용합니다. (테스트) 프로그램이 디버그 출력을 캡처하기 위해 모듈 수준 변수를 패치 하는 데 의존하면, 대신 sys.stderr을 캡처하도록 갱신해야 합니다.str.startswith()
와str.endswith()
메서드는 빈 문자열을 찾고 인덱스가 완전히 범위를 벗어났을 때 더는True
를 반환하지 않습니다. (Contributed by Serhiy Storchaka in bpo-24284.)inspect.getdoc()
함수는 이제 베이스 클래스에서 상속된 설명서 문자열을 반환합니다. 상속된 설명서가 적절하면 설명서 문자열을 더는 복제할 필요가 없습니다. 상속된 문자열을 억제하려면, 빈 문자열을 지정해야 합니다 (또는 설명서를 채울 수 있습니다). 이 변경 사항은pydoc
모듈과help()
함수의 출력에 영향을 줍니다. (Contributed by Serhiy Storchaka in bpo-15582.)중첩된
functools.partial()
호출은 이제 평활화됩니다. 이전 동작에 의존한다면, 이제functools.partial()
객체에 어트리뷰트를 추가하거나functools.partial()
의 서브 클래스를 만들 수 있습니다. (Contributed by Alexander Belopolsky in bpo-7830.)
C API의 변경¶
(비공개)
PyMemoryViewObject
구조체의 문서화되지 않은format
멤버가 제거되었습니다.memoryobject.h
의 관련 부분에 의존하는 모든 확장은 다시 빌드해야 합니다.PyMemAllocator
구조체는PyMemAllocatorEx
로 이름이 바뀌었고 새로운calloc
필드가 추가되었습니다.참조를 누출한 문서화되지 않은 매크로
PyObject_REPR
을 제거했습니다.PyUnicode_FromFormat()
과 유사한 함수에서 객체의repr()
을 포맷하려면 포맷 문자%R
을 사용하십시오. (Contributed by Serhiy Storchaka in bpo-22453.)__module__
어트리뷰트가 없으면 피클링과 인트로스펙션이 망가지므로,__module__
어트리뷰트가 없는 내장형에 대해 폐지 경고가 발생합니다. 이것은 향후 AttributeError가 될 것입니다. (Contributed by Serhiy Storchaka in bpo-20204.)PEP 492 구현의 일부로,
PyTypeObject
의tp_reserved
슬롯이tp_as_async
슬롯으로 대체되었습니다. 새로운 형, 구조체 및 함수는 코루틴 객체를 참조하십시오.
파이썬 3.5.4의 주목할만한 변경 사항¶
새로운 make regen-all
빌드 대상¶
교차 컴파일을 단순화하고, 기존 버전의 파이썬이 이미 사용할 수 있어야 한다는 요구 사항 없이 CPython을 안정적으로 컴파일 할 수 있도록, autotools 기반 빌드 시스템은 더는 파일 수정 시간을 기반으로 생성된 파일을 묵시적으로 재컴파일하려고 시도하지 않습니다.
대신, 원할 때 이러한 파일을 강제로 재생성하기 위해 새로운 make regen-all
명령이 추가되었습니다 (예를 들어 사전 생성된 버전을 기반으로 파이썬의 초기 버전이 이미 빌드된 후).
보다 선택적 재생성 대상도 정의됩니다 - 자세한 내용은 Makefile.pre.in을 참조하십시오.
(Contributed by Victor Stinner in bpo-23404.)
버전 3.5.4에 추가.