Python 3.12 둘러보기

Python 3.12의 rc가 곧 릴리즈 된다고 한다. 블로그에는 7월 31일 릴리즈 예정이라고 한다. 곧 나올 버전이니, Python 3.12 버전의 주요 변경점을 정리해볼까 한다.

주요 변경점

  • Generic Class를 위한 타입 어노테이션 문법 추가
  • f-string 사용성 개선
  • Python level에서 사용가능한 버퍼 프로토콜 지원 (매직 메소드)
  • 에러 메시지 개선 (제안이 추가됨)
  • Comprehensions의 성능 개선
  • 그 외 Deprecated 모듈, 클래스, 함수 등 삭제

f-string 사용성 개선

>>> songs = ["A", "B", "C"]
>>> print(f"{",".join(songs)}")
A,B,C

문자열을 생성할 때 사용하는 따옴표를 f-string 내에서 사용할 수 있게 개선 되었다.

>>> print(f"{",".join([
    "Data1",
    "Data2",
])}")
Data1,Data2

f-string 내에서 사용되는 표현식이 여러 행을 지원하게 되었다.

>>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")
This is the playlist: A♥B♥C

f-string 내에서 \N을 이용한 유니코드를 사용할 수 있게 되었다.

에러 메시지 개선

sys.version_info
Traceback (most recent call last):
  File <stdin>", line 1, in <module>
NameError: name 'sys' is not defined. Did you forget to import 'sys'?

라이브러리를 import 하지 않고 사용하는 경우 에러 메시지에서 제안하는 문구가 추가되었다.

Comprehensions 개선

리스트, 딕셔너리, 집합 자료형의 Comprehensions 표현에 대해 성능 향상이 있다. Comprehensions 는 내부적으로 함수를 만들어서 처리하는데, 이 부분을 Inline으로 처리하여 성능을 향상시켰다고 한다.

dis 모듈을 통해 검증을 해볼 수 있지만(생략), 간단히 런타임 에러를 발생시켜서 Trackback을 보고 스택 변화를 살펴볼 수 있다.

def g():
    raise RuntimeError("boom")

def f():
    return [g() for x in [1]]

이와 같은 함수를 정의하고 3.12에서 제안한 방식과 기존의 결과를 확인해보면 다음과 같다.

기존 결과

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in f
  File "<stdin>", line 5, in <listcomp>
  File "<stdin>", line 2, in g
RuntimeError: boom

3.12 변경 이후

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in f
  File "<stdin>", line 2, in g
RuntimeError: boom

TypedDict를 **kwargs에 사용할 수 있도록 개선

class Movie(TypedDict):
    name: str
    year: int
def foo(**kwargs: Unpack[Movie]) -> None: 
    assert_type(kwargs, Movie)  # OK!

kwargs: Movie = {"name": "Life of Brian", "year": 1979}

foo(**kwargs)                               # OK!
foo(name="The Meaning of Life", year=1983)  # OK!

TypedDict를 사용하여 타입 힌트를 지정할 수 있는데 (3.8 이상), 이를 kwargs에서 사용할 수 있도록 개선했다고 한다.

참고


매일 글을 쓰기 위해 필요한건 충분한 인풋이란걸 새삼 깨달았다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다