Python 3.9

Python 3.9.0(최종)은 2020년 10월 5일에 출시되었습니다. 3.9의 기능은 PEP 596 에 정의되어 있으며, 변경 사항에 대한 자세한 설명은 What’s New in Python 3.9 에서 확인할 수 있습니다

기능

상태

PEP 573

C 확장 타입의 메서드에서 모듈 상태에 대한 빠른 접근

해당 없음

PEP 584

dict에 합집합 연산자 추가

완료 [1]

PEP 585

표준 컬렉션에서의 제네릭 타입 힌팅

PEP 593

유연한 함수 및 변수 어노테이션

PEP 602

CPython이 연간 릴리스 주기를 채택합니다. 연간 대신 2개월 릴리스 주기를 목표로 함

해당 없음

PEP 614

데코레이터에 대한 완화된 문법 제한

PEP 615

IANA 시간대 데이터베이스가 이제 표준 라이브러리의 zoneinfo 모듈에 존재합니다

PEP 616

접두사와 접미사를 제거하는 문자열 메서드

PEP 617

CPython은 이제 PEG 기반의 새로운 파서를 사용합니다

해당 없음

기타 언어 변경 사항:

__import__() 는 이제 ValueError 대신 ImportError 를 발생시킵니다

완료

Python은 이제 명령줄에서 지정된 스크립트 파일명의 절대 경로를 가져옵니다(예: python3 script.py): __main__ 모듈의 __file__ 속성이 상대 경로가 아닌 절대 경로가 되었습니다

기본적으로 최상의 성능을 위해 errors 인자는 첫 번째 인코딩/디코딩 오류에서만 검사되며, encoding 인자는 빈 문자열에 대해 때때로 무시됩니다

“”.replace(“”, s, n) 은 이제 0이 아닌 모든 n에 대해 빈 문자열 대신 s 를 반환합니다. 이는 이제 “”.replace(“”, s) 와 일관됩니다

이제 유효한 표현식이라면 무엇이든 데코레이터로 사용할 수 있습니다. 이전에는 문법이 훨씬 더 제한적이었습니다

aclose() / asend() / athrow() 의 병렬 실행이 이제 금지되며, ag_running 은 이제 비동기 제너레이터의 실제 실행 상태를 반영합니다

__iter__ 메서드 호출 시 발생하는 예기치 않은 오류가 더 이상 in 연산자와 operator 모듈의 함수 contains(), indexOf(), countOf()에서 TypeError로 가려지지 않습니다

괄호로 묶이지 않은 람다 표현식은 더 이상 컴프리헨션과 제너레이터 표현식의 if 절에서 표현식 부분이 될 수 없습니다

내장 모듈 변경 사항:

asyncio

심각한 보안 우려로 인해 asyncio.loop.create_datagram_endpoint() 의 reuse_address 매개변수가 더 이상 지원되지 않습니다

ThreadPoolExecutor 가 종료를 완료할 때까지 대기하는 기본 실행기의 종료를 예약하는 새로운 코루틴 shutdown_default_executor() 가 추가되었습니다. 또한 asyncio.run() 이 새로운 코루틴을 사용하도록 업데이트되었습니다.

프로세스 파일 디스크립터를 폴링하는 Linux 전용 자식 감시자 구현인 asyncio.PidfdChildWatcher 가 추가되었습니다

새로운 coroutine asyncio.to_thread() 가 추가되었습니다

타임아웃으로 인해 태스크를 취소할 때, asyncio.wait_for() 는 이제 양의 타임아웃에서와 마찬가지로 timeout이 <= 0인 경우에도 취소가 완료될 때까지 대기합니다

asyncio 는 이제 ssl.SSLSocket 소켓과 호환되지 않는 메서드를 호출할 때 TyperError 를 발생시킵니다

gc

가비지 컬렉션은 부활한 객체에서 블로킹되지 않습니다

객체가 가비지 컬렉터에 의해 종료(finalize)되었는지 확인하는 새로운 함수 gc.is_finalized() 가 추가되었습니다

math

여러 인자를 처리하도록 math.gcd() 함수가 확장되었습니다. 이전에는 두 개의 인자만 지원했습니다

math.lcm() 이 추가되었습니다: 지정된 인자들의 최소공배수를 반환합니다

math.nextafter() 가 추가되었습니다: y 방향으로 x 다음의 부동소수점 값을 반환합니다

math.ulp() 가 추가되었습니다: float의 최하위 비트 값을 반환합니다

os

Linux 전용 os.pidfd_open()os.P_PIDFD 가 노출되었습니다

os.unsetenv() 함수가 이제 Windows에서도 사용 가능합니다

완료

os.putenv()os.unsetenv() 함수가 이제 항상 사용 가능합니다

완료

os.waitstatus_to_exitcode() 함수가 추가되었습니다: 대기 상태를 종료 코드로 변환합니다

random

새로운 random.Random.randbytes 메서드가 추가되었습니다: 임의 바이트를 생성합니다

sys

새로운 sys.platlibdir 속성이 추가되었습니다: 플랫폼별 라이브러리 디렉터리의 이름

이전에는 sys.stderr 가 비대화형일 때 블록 버퍼링되었습니다. 이제 stderr은 기본적으로 항상 라인 버퍼링됩니다

참고