Python 3.6

Python 3.6 beta 1은 2016년 9월 12일에 출시되었으며, 새로운 기능 요약은 다음에서 확인할 수 있습니다:

새로운 구문 기능

상태

PEP 498

리터럴 문자열 포매팅

완료

PEP 515

숫자 리터럴의 밑줄

완료

PEP 525

비동기 제너레이터

PEP 526

변수 어노테이션 구문(잠정)

완료

PEP 530

비동기 컴프리헨션

새로운 내장 기능

PEP 468

함수에서 kwargs 의 순서 보존

PEP 487

클래스 생성의 단순화된 커스터마이징

부분 구현 [1]

PEP 520

클래스 속성 정의 순서 보존

표준 라이브러리 변경 사항

PEP 495

로컬 시간 모호성 해소

PEP 506

표준 라이브러리에 secrets 모듈 추가

PEP 519

파일 시스템 경로 프로토콜 추가

CPython 내부 구조

PEP 509

dict에 프라이빗 버전 추가

하지 않음

PEP 523

CPython에 프레임 평가 API 추가

Linux/Windows 변경 사항

PEP 524

Linux에서 os.urandom() 을 블로킹으로 변경(시스템 시작 중)

PEP 528

Windows 콘솔 인코딩을 UTF-8로 변경

PEP 529

Windows 파일 시스템 인코딩을 UTF-8로 변경

기타 언어 변경 사항:

global 또는 nonlocal 문은 이제 동일한 스코프에서 해당 이름이 처음 사용되기 전에 텍스트상으로 나타나야 합니다. 이전에는 SyntaxWarning이었습니다.

이제 특수 메서드를 None으로 설정하여 해당 연산을 사용할 수 없음을 나타낼 수 있습니다. 예를 들어, 클래스가 __iter__()None 으로 설정하면 그 클래스는 반복 가능하지 않습니다.

반복되는 트레이스백 줄이 길게 이어질 경우 이제 [Previous line repeated {count} more times] 로 축약됩니다

import는 모듈을 찾을 수 없을 때 이제 새로운 예외 ModuleNotFoundError 를 발생시킵니다. 현재 (try-except에서) ImportError를 검사하는 코드는 계속 작동합니다.

인자가 없는 super() 에 의존하는 클래스 메서드는 이제 클래스 생성 중 메타클래스 메서드에서 호출될 때 올바르게 작동합니다.

내장 모듈 변경 사항:

array

소진된 array.array 의 이터레이터는 이제 반복 대상 배열이 확장되더라도 소진된 상태로 유지됩니다.

binascii

b2a_base64() 함수는 이제 반환 값에 개행 문자를 추가할지 여부를 제어하는 선택적 newline 키워드 인자를 받습니다

완료

cmath

새로운 cmath.tau (τ) 상수가 추가되었습니다

새로운 상수: math.infmath.nan 과 일치하는 cmath.infcmath.nan , 그리고 complex repr에서 사용하는 형식과 일치하는 cmath.infjcmath.nanj 도 추가되었습니다

collections

크기를 가진 반복 가능 컨테이너 클래스를 나타내는 새로운 Collection 추상 기반 클래스가 추가되었습니다

새로운 Reversible 추상 기반 클래스는 __reversed__() 메서드도 제공하는 반복 가능 클래스를 나타냅니다.

새로운 AsyncGenerator 추상 기반 클래스는 비동기 제너레이터를 나타냅니다.

namedtuple() 함수는 이제 선택적 키워드 인자 module을 받으며, 지정된 경우 반환되는 명명된 튜플 클래스의 __module__ 속성에 사용됩니다.

namedtuple() 의 verbose 및 rename 인자는 이제 키워드 전용입니다.

재귀적인 collections.deque 인스턴스를 이제 피클링할 수 있습니다.

hashlib

BLAKE2 해시 함수가 모듈에 추가되었습니다. blake2b()blake2s() 는 항상 사용 가능하며 BLAKE2의 전체 기능 집합을 지원합니다.

SHA-3 해시 함수 sha3_224(), sha3_256(), sha3_384(), sha3_512()SHAKE 해시 함수 shake_128()shake_256() 이 추가되었습니다.

비밀번호 기반 키 유도 함수 scrypt() 가 이제 OpenSSL 1.1.0 이상에서 사용 가능합니다.

json

json.load()json.loads() 는 이제 바이너리 입력을 지원합니다. 인코딩된 JSON은 UTF-8, UTF-16 또는 UTF-32 중 하나로 표현되어야 합니다.

math

새로운 math.tau (τ) 상수가 추가되었습니다

완료

os

새로운 close() 메서드를 사용하여 scandir() 이터레이터를 명시적으로 닫을 수 있습니다. scandir() 이터레이터는 이제 컨텍스트 관리자 프로토콜을 지원합니다.

Linux에서 os.urandom() 은 이제 보안 강화를 위해 시스템 urandom 엔트로피 풀이 초기화될 때까지 블로킹됩니다.

Linux의 getrandom() 시스템 콜(임의 바이트 가져오기)이 이제 새로운 os.getrandom() 함수로 노출됩니다.

re

정규 표현식에서 수식어 범위(modifier span) 지원이 추가되었습니다. 예: ‘(?i:p)ython’ 은 ‘python’과 ‘Python’에는 일치하지만 ‘PYTHON’에는 일치하지 않습니다; ‘(?i)g(?-i:v)r’‘GvR’‘gvr’ 에는 일치하지만 ‘GVR’ 에는 일치하지 않습니다.

매치 객체 그룹은 group() 과 동등한 __getitem__ 을 통해 접근할 수 있습니다. 따라서 mo[‘name’] 은 이제 mo.group(‘name’) 과 동등합니다.

매치 객체는 이제 인덱스 형식의 객체를 그룹 인덱스로 지원합니다.

socket

ioctl() 함수는 이제 SIO_LOOPBACK_FAST_PATH 제어 코드를 지원합니다.

getsockopt() 상수 SO_DOMAIN , SO_PROTOCOL, SO_PEERSEC , SO_PASSSEC 가 이제 지원됩니다.

setsockopt() 은 이제 setsockopt(level, optname, None, optlen: int) 형식을 지원합니다.

socket 모듈은 이제 Linux 커널 crypto API와 인터페이스하기 위한 주소 패밀리 AF_ALG 를 지원합니다. ALG_, SOL_ALGsendmsg_afalg() 가 추가되었습니다.

새로운 Linux 상수 TCP_USER_TIMEOUTTCP_CONGESTION 이 추가되었습니다.

ssl

ssl은 OpenSSL 1.1.0을 지원합니다. 최소 권장 버전은 1.0.2입니다.

기본 암호 모음에서 3DES가 제거되었으며 ChaCha20 Poly1305 암호 모음이 추가되었습니다.

SSLContext 는 옵션과 암호에 대해 더 나은 기본 구성을 갖습니다.

새로운 SSLSession 클래스를 사용하여 한 클라이언트 측 연결의 SSL 세션을 다른 연결로 복사할 수 있습니다. TLS 세션 재개는 초기 핸드셰이크 속도를 높이고 지연 시간을 줄이며 성능을 개선할 수 있습니다.

새로운 get_ciphers() 메서드를 사용하여 암호 우선순위 순으로 활성화된 암호 목록을 가져올 수 있습니다.

모든 상수와 플래그가 IntEnumIntFlags 로 변환되었습니다.

SSLContext 에 대한 서버 및 클라이언트 측 전용 TLS 프로토콜이 추가되었습니다.

TLS 1.3 핸드셰이크 후 인증을 활성화하기 위한 SSLContext.post_handshake_auth 와 이를 시작하기 위한 ssl.SSLSocket.verify_client_post_handshake() 가 추가되었습니다.

struct

이제 ‘e’ 형식 지정자를 통해 IEEE 754 반정밀도 부동소수점을 지원합니다.

sys

새로운 getfilesystemencodeerrors() 함수는 유니코드 파일명과 바이트 파일명 간 변환에 사용되는 오류 모드의 이름을 반환합니다.

zlib

compress()decompress() 함수는 이제 키워드 인자를 받습니다

참고