Python 3.9 : 새로운 기능과 향상된 기능

오늘 출시 된 Python 3.9는 언어의 기능과 언어 개발 방법 모두에 상당한 변화를 가져옵니다. Python은 지난 몇 년 동안 인기가 급상승했으며 데이터 과학 및 기계 학습과 같이 빠르게 발전하는 영역에서 사용이 폭발적으로 증가했습니다. 이 프로젝트는 모든 새로운 요구 사항에 보조를 맞추기 위해 열심히 노력하고 있습니다. 

다음은 Python 3.9의 모든 새로운 주요 기능에 대한 요약입니다.

Python이 연간 릴리스 주기로 전환

이 시점까지 Python은 18 개월 주기로 개발 및 출시되었습니다. PEP 602는 Python 개발 팀이 연간 릴리스주기를 채택 할 것을 제안했으며 그 제안이 수락되었습니다. 

연간 릴리스주기는 릴리스 당 기능이 적다는 것을 의미하지만 기능 테스트에 대한 피드백이 더 빨라지고 각 릴리스에 대해 잠재적으로 중단 될 수있는 변경 사항이 적으므로 사용자와 Linux 배포 관리자가 Python을 더 자주 업그레이드하도록 인센티브가 높아집니다. 또한 개발주기 후반에 제안 된 새로운 기능이 새 릴리스에 적용되는 데 오래 걸리지 않을 것임을 의미합니다.

새로운 타임 라인은 Python 3.9가 2020 년 10 월에 출시됨을 의미합니다. Python 3.10은 2020 년 5 월 19 일에 공식적으로 사전 알파 개발을 시작했으며 Python 3.9가 출시 될 때 알파 개발 단계에 진입하고 2021 년 10 월에 출시 될 예정입니다. 향후 Python 릴리스는 다음을 따릅니다. 같은 패턴.

Python이 기본적으로 더 빨라짐

모든 Python 버전은 이전 버전보다 성능이 향상되었습니다. Python 3.9는 기존 코드를 변경할 필요없이 성능을 향상시키는 두 가지 큰 개선 사항을 제공합니다.

첫 번째 개선은 vectorcallPython 3.8에 도입 된 프로토콜을 더 많이 사용하는 것입니다 . vectorcall호출을 위해 생성 된 임시 객체를 최소화하거나 제거하여 많은 일반적인 함수 호출을 더 빠르게 만듭니다. Python 3.9에서 여러 Python 내장 기능 — range, tuple, set, frozenset, list, dictvectorcall실행 속도를 높이기 위해 내부적으로 사용 합니다.

두 번째로 큰 성능 향상 도구는 Python 소스 코드를보다 효율적으로 구문 분석하는 것입니다. CPython 런타임을위한 새로운 파서는 성능 문제를 해결하기위한 것이 아니라 원래 파서의 내부 불일치를 처리하도록 설계되었습니다. 그러나 중요한 부가적인 이점은 특히 대용량 코드의 경우 더 빠른 구문 분석입니다.

더 많은 Python 문자열 및 사전 함수

Python을 사용하면 일반적인 데이터 유형을 쉽게 조작 할 수 있으며 Python 3.9는 문자열 및 사전에 대한 새로운 기능을 통해 이러한 용이성을 확장합니다. 문자열의 경우 접두사 및 접미사를 제거하는 새로운 방법이 있습니다. 작업을 수행하려면 오랫동안 많은 수동 작업이 필요했습니다. 사전의 경우 통합 연산자가 있습니다. 하나는 두 사전을 새 사전으로 병합하고 하나는 한 사전의 내용을 다른 사전으로 업데이트합니다.

데코레이터는 몇 가지 제한을 잃습니다.

데코레이터를 사용하면 Python 함수를 래핑하여 프로그래밍 방식으로 동작을 변경할 수 있습니다. 이전에 데코레이터는 @ 기호, 이름 (예 func:) 또는 점으로 구분 된 이름 ( func.method) 및 선택적으로 단일 호출 ( func.method(arg1, arg2))으로 만 구성 될 수있었습니다 . Python 3.9에서 데코레이터는 이제 유효한 표현식으로 구성 될 수 있습니다.

이러한 제한을 극복하는 한 가지 오랜 방법은 데코레이터로 사용할 때 더 복잡한 표현식을 나타내는 함수 또는 람다 표현식을 만드는 것이 었습니다. 이제 데코레이터로 작동 할 수있는 무언가를 산출한다면 어떤 식이든 할 수 있습니다.

새로운 Python 유형 작업

지난 몇 가지 버전에서 Python은 유형 힌트에 대한 지원을 확장했습니다. 이것은 주로 린터 및 코드 검사기를위한 것입니다. 유형은 CPython에서 런타임에 적용되지 않으며 Python을 정적으로 유형이 지정된 언어로 만들 계획이 없습니다. 그러나 유형 힌트는 대규모 코드베이스에서 일관성을 보장하는 강력한 도구이므로 Python 코드는 여전히 유형 힌트를 사용하여 이점을 얻을 수 있습니다. 

유형 힌트 및 유형 주석에 대한 두 가지 새로운 기능이 Python 3.9에 도입되었습니다. 하나는 컬렉션의 내용에 대한 유형 힌트 (예 : 목록 및 사전)를 이제 Python에서 기본적으로 사용할 수 있다는 것입니다. 이는 예를 들어 list[int] 목록을 typing라이브러리에서 수행 할 필요없이 정수 목록으로 설명 할 수 있음을 의미 합니다.

파이썬의 타이핑 메커니즘에 두 번째로 추가 된 것은 유연한 함수와 변수 주석입니다. 이를 통해 Annotated미리 (린팅 도구 사용) 또는 런타임에 검사 할 수있는 메타 데이터를 사용하여 유형을 설명하는 유형을 사용할 수 있습니다. 예를 들어, C Annotated[int, ctype("char")]에서 char유형 으로 간주되어야하는 정수를 설명하는 데 사용할 수 있습니다 . 기본적으로 Python은 이러한 주석에 대해 아무 작업도하지 않지만 코드 린터에서 사용할 수 있습니다. 

Python 내부 개선

Python의 내부를 정리, 개선 및 현대화하는 것은 Python 개발자를위한 지속적인 이니셔티브이며 Python 3.9에는 이러한 맥락에서 몇 가지 변경 사항이 있습니다.

첫 번째는 모듈이 수입 기계와 상호 작용하는 방식을 재 설계 한 것입니다. C로 작성된 Python 확장 모듈은 이제 가져올 때 일반 Python 모듈처럼 동작하도록하는 새로운로드 메커니즘을 사용할 수 있습니다. Python 표준 라이브러리의 여러 모듈이이 동작을 새로 지원합니다 _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref.. 새로운 로딩 메커니즘은 확장 모듈을 Python에서보다 유연하게 처리 할 수있을뿐만 아니라 고급 후킹 동작과 같은 새로운 기능을 가능하게합니다.

두 번째 정리 이니셔티브는 CPython을위한 안정적인 내부 ABI로, Python 3의 수명 동안 지속되도록 보장됩니다. 역사적으로 Python의 각 주요 개정판은 이전 버전과 ABI가 호환되지 않아 모든 새 버전에 대해 확장 모듈을 다시 컴파일해야합니다. 이제부터는 안정적인 ABI를 사용하는 모든 확장 모듈이 Python 버전에서 작동합니다. Python 3.9에서 표준 라이브러리의 다음 모듈은 안정적인 ABI를 사용합니다 audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib..

Python 3.9의 기타 변경 사항

  • Python의 표준 라이브러리는 이제 IANA 시간대 데이터베이스를 지원합니다. 이 데이터베이스는 잘 관리되고 널리 사용되며 Python의 datetime 라이브러리에서 직접 사용하는 방법을 사용하면 시간을 크게 절약 할 수 있습니다.
  • 새로운 문자열 메서드를 사용하면 접두사와 접미사를 쉽게 제거 할 수 있습니다. 이것은 필요하다고 생각되는 것보다 약간 너무 많은 상용구를 필요로하는 일반적인 일상 사용 시나리오 중 하나입니다. new .removeprefix().removesuffix()메서드는 문자열에 존재하는 경우 문제의 접두사 또는 접미사를 제외한 문자열의 수정 된 복사본을 반환합니다.

Python으로 더 많은 작업을 수행하는 방법

  • 코드를 깔끔하게 유지하기위한 4 가지 Python 유형 검사기
  • Python 스타일 : Python 코드를 정리하는 5 가지 도구
  • Python 목록 데이터 유형으로 작업하는 방법
  • BeeWare Briefcase로 Python 앱을 패키징하는 방법
  • Anaconda를 다른 Python과 나란히 실행하는 방법
  • Python 데이터 클래스를 사용하는 방법
  • Python에서 비동기 시작하기
  • Python에서 asyncio를 사용하는 방법
  • Python 비동기 점검을위한 3 단계
  • PyInstaller를 사용하여 Python 실행 파일을 만드는 방법
  • Cython 튜토리얼 : 파이썬 속도를 높이는 방법
  • Python을 현명하게 설치하는 방법
  • Poetry로 Python 프로젝트를 관리하는 방법
  • Pipenv로 Python 프로젝트를 관리하는 방법
  • Virtualenv 및 Venv : Python 가상 환경 설명
  • Python virtualenv 및 venv해야 할 일과하지 말아야 할 일
  • Python 스레딩 및 하위 프로세스 설명
  • Python 디버거를 사용하는 방법
  • timeit을 사용하여 Python 코드를 프로파일 링하는 방법
  • cProfile을 사용하여 Python 코드를 프로파일 링하는 방법
  • Python을 JavaScript로 변환하는 방법 (그리고 다시)