Python 3.10 ~ 3.14 특이점 정리

2025. 12. 15. 12:16Computer Science/Python

(진짜) 파이썬

 

Python 3.10

  • Context Manager에서 괄호 쓰는게 가능해졌습니다. 대충 With (A as one, B as two..) 와 같은게 가능해졌다는 소리입니다.
  • SynthaxError가 읽기 쉬워졌습니다! 예전에는 괄호 안닫으면 제대로 표시가 안 됬는데, 이제는 가능합니다!
  • 그 외에도 IndentationErrors, AttributeErrors가 혁명적으로 개선되었습니다.
  • match-case와 같은 구조적 패턴 문법이 등장했습니다!! 이제 빌어 쳐먹을 elif를 도배하지 않아도 됩니다. 또한 |을 사용하여 파이프라이닝 마냥 결합할수도 있습니다.
def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"
  • 타입 명시가 아래와 같은 방법으로도 가능해 집니다. (X|Y)
def square(number: int | float) -> int | float:
    return number ** 2

 

Python 3.11

CPython 3.11 is an average of 25% faster than CPython 3.10 as measured with the pyperformance benchmark suite, when compiled with GCC on Ubuntu Linux. Depending on your workload, the overall speedup could be 10-60%.
- Python Document
  • 숙원사업이었던 Cpython 성능개선이 이루어졌습니다. 3.10에 비해서 25%정도 더 빨라졌습니다!
  • 파이썬 함수를 호출할때 생성되는 Python frame에 대해서 메모리 사용 측면에서 최적화가 이루어 졌습니다.
  • Exception Groups이라는 기능이 생겼습니다. 기존 인터프리터는 여러개의 오류를 한번에 다룰 수 없었습니다만(좀 뻘짓을 해서 가능은 했습니다) 이제 공식적으로 가능해졌습니다.
>>> eg = ExceptionGroup(
...     "one",
...     [
...         TypeError(1),
...         ExceptionGroup(
...             "two",
...              [TypeError(2), ValueError(3)]
...         ),
...         ExceptionGroup(
...              "three",
...               [OSError(4)]
...         )
...     ]
... )
>>> import traceback
>>> traceback.print_exception(eg)
  | ExceptionGroup: one (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | TypeError: 1
    +---------------- 2 ----------------
    | ExceptionGroup: two (2 sub-exceptions)
    +-+---------------- 1 ----------------
      | TypeError: 2
      +---------------- 2 ----------------
      | ValueError: 3
      +------------------------------------
    +---------------- 3 ----------------
    | ExceptionGroup: three (1 sub-exception)
    +-+---------------- 1 ----------------
      | OSError: 4
      +------------------------------------

>>> type_errors = eg.subgroup(lambda e: isinstance(e, TypeError))
>>> traceback.print_exception(type_errors)
  | ExceptionGroup: one (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | TypeError: 1
    +---------------- 2 ----------------
    | ExceptionGroup: two (1 sub-exception)
    +-+---------------- 1 ----------------
      | TypeError: 2
      +------------------------------------
>>>
  • aifc, chunk, audioop, crypt, nis, uu, spwd와 같은 기존 모듈들에 대한 지원이 중단됩니다.

 

Python 3.12

def max[T](args: Iterable[T]) -> T:
    ...

class list[T]:
    def __getitem__(self, index: int, /) -> T:
        ...

    def append(self, element: T) -> None:
        ...
  • type문법이 들어왔습니다. 쉽게 말해서 generic classes가 도입됬다고 보시면 됩니다.
  • 뭔가 좀 껄끄러웠던 문자열 포맷팅이 좀 개선됬습니다. 자세한 내용은 PEP 701을 참조하도록 합시다...
  • CPython 모니터링용 API가 생겼습니다.
  • **kwargs에 대한 타이핑이 더 정확하게 가능해졌습니다. 자세한 내용은 PEP 692를 참조하도록 합시다...

 

Python 3.13

  • Global Interpreter Lock(스레드는 많아도 계산은 한명씩 줄서서)이 일부 꺼질 수 있게 지원합니다. 적폐청산 실험적 기능이고 기본은 아닙니다만, 뭔가 엄청난 짓을 할수 있어 보입니다. 물론 기존과의 호환성은..
  •  실험적으로 Cpython에 JIT Compiler가 도입되었습니다. (사실은 24년 초에 이미 슬쩍 넣어두긴 했음) 물론 그렇다고 확실하게 더 빨라지고 그런건 아닌긴 한데, 여러분이 그냥 end단 프로그래머면 신경 끄셔도 됩니다. (대놓고 How to teach statement에 써져 있음)

 

Python 3.14

  • 클래스, 함수, 모듈들에 대한 어노테이션이 더이상 값으로 평가되지 않습니다(Deferred evaluation). 이는 성능을 향상시키기 위해서라는데.. 정 필요하면 annotationlib이라는 module을 받아서 쓰랍니다. 근데 왜?
  • Standard Library에서 여러개의 Cpython Runtime을 돌리기가 편해졌습니다! 예전에는 C단 API에서만 됬다면, 이제는 concurrent.interpreters 모듈을 통해서도 가능합니다.
  • PEP750에 따라서 Custom String Processing을 위한 Template string을 도입했습니다. f스트링이랑 문법은 뭐 딱히 달라진건 없습니다만, 대충 String을 담는 거시기한게 하나 더 생겼다고 보시면 됩니다. 자세한건 구글에 t-string을 쳐봅시다.\

 

Ref : Python Official Documentation, What's new in Python 3.x?

'Computer Science > Python' 카테고리의 다른 글

온라인 커뮤니티상의 인기글 제목의 특징  (2) 2025.07.01