Python 3.8

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

기능

상태

PEP 570

위치 전용 인자

PEP 572

할당 표현식

완료

PEP 574

대역 외 데이터를 지원하는 피클 프로토콜 5

PEP 578

런타임 감사 후크

PEP 587

Python 초기화 구성

PEP 590

Vectorcall: CPython을 위한 빠른 호출 프로토콜

기타

f-문자열은 자기 문서화 표현식과 디버깅을 위해 =를 지원합니다

완료

기타 언어 변경 사항:

구현상의 문제로 인해 continue 문은 finally 절에서 허용되지 않았습니다. Python 3.8에서 이 제한이 해제되었습니다

완료

bool, int , fractions.Fraction 타입은 이제 floatdecimal.Decimal 에서 볼 수 있는 것과 같은 as_integer_ratio() 메서드를 갖습니다

int, float , complex 의 생성자는 이제 __index__() 특수 메서드가 사용 가능하고 해당하는 메서드 __int__(), __float__() 또는 __complex__() 가 사용 불가능한 경우 __index__() 를 사용합니다

정규 표현식에서 N{name} 이스케이프 지원이 추가되었습니다

Dict와 dictview는 이제 reversed() 를 사용하여 역삽입 순서로 반복 가능합니다

함수 호출에서 키워드 이름에 허용되는 구문이 더욱 제한되었습니다. 특히, f((keyword)=arg)는 더 이상 허용되지 않습니다

yield 및 return 문에서 일반화된 반복 가능 객체 언패킹은 더 이상 둘러싸는 괄호가 필요하지 않습니다

[(10, 20) (30, 40)]와 같은 코드에서 쉼표가 누락된 경우, 컴파일러는 유용한 제안과 함께 SyntaxWarning을 표시합니다

datetime.date 또는 datetime.datetime 의 서브클래스와 datetime.timedelta 객체 간의 산술 연산은 이제 기반 클래스가 아닌 서브클래스의 인스턴스를 반환합니다

Python 인터프리터가 Ctrl-C (SIGINT) 로 중단되고 그 결과로 발생한 KeyboardInterrupt 예외가 잡히지 않으면, Python 프로세스는 이제 SIGINT 신호를 통해 종료되거나 올바른 종료 코드로 종료되어 호출 프로세스가 Ctrl-C 로 인해 종료되었음을 감지할 수 있습니다

일부 고급 프로그래밍 스타일은 기존 함수에 대한 types.CodeType 객체 업데이트를 필요로 합니다

정수의 경우, pow() 함수의 세 인자 형식은 이제 밑이 모듈러스와 서로소인 경우 지수가 음수가 되는 것을 허용합니다

Dict 컴프리헨션이 dict 리터럴과 동기화되어 키가 먼저 계산되고 값이 두 번째로 계산됩니다

object.__reduce__() 메서드는 이제 두 개에서 여섯 개 길이의 튜플을 반환할 수 있습니다

내장 모듈 변경 사항:

asyncio

asyncio.run() 이 잠정 API에서 안정 API로 승격되었습니다

완료

python -m asyncio 를 실행하면 네이티브 비동기 REPL이 시작됩니다

예외 asyncio.CancelledError 는 이제 Exception 이 아닌 BaseException 을 상속하며 더 이상 concurrent.futures.CancelledError 를 상속하지 않습니다

완료

asyncio.Task 내부에 래핑된 코루틴을 가져오기 위한 asyncio.Task.get_coro() 가 추가되었습니다

Asyncio 태스크는 이제 asyncio.create_task() 또는 create_task() 이벤트 루프 메서드에 name 키워드 인자를 전달하거나, 태스크 객체에서 set_name() 메서드를 호출하여 이름을 지정할 수 있습니다

asyncio.loop.create_connection() 에 Happy Eyeballs 지원이 추가되었습니다. 동작을 지정하기 위해 두 개의 새로운 매개변수가 추가되었습니다: happy_eyeballs_delay 와 interleave.

gc

get_objects() 는 이제 객체를 가져올 세대를 나타내는 선택적 generation 매개변수를 받을 수 있습니다. (다만, gc 는 내장 모듈이지만 get_objects() 는 MicroPython에서 구현되어 있지 않습니다)

math

두 점 사이의 유클리드 거리를 계산하기 위한 새로운 함수 math.dist() 가 추가되었습니다

다차원을 처리하도록 math.hypot() 함수가 확장되었습니다

“시작” 값(기본값: 1)에 숫자의 반복 가능 객체를 곱한 곱을 반환하는, sum() 에 대응하는 함수로서 새로운 함수 math.prod() 가 추가되었습니다

두 개의 새로운 조합론 함수 math.perm()math.comb() 가 추가되었습니다

부동소수점으로 변환하지 않고 정확한 정수 제곱근을 계산하기 위한 새로운 함수 math.isqrt() 가 추가되었습니다

함수 math.factorial() 은 더 이상 int 형식이 아닌 인자를 받지 않습니다

완료

sys

“발생 불가능한 예외(unraisable exceptions)”가 처리되는 방식을 제어하기 위해 재정의할 수 있는 새로운 sys.unraisablehook() 함수가 추가되었습니다