본문 바로가기

카테고리 없음

파이썬 버전별 주요 특징 정리 (3.6~3.12)

Java에 1.8이 있다면 python엔 3.6이 비슷한 포지션인것 같다.

 

Python 3.6

  • f-strings
  • 변수 타입 어노테이션
  • 비동기 제너레이터
  • 비동기 컴프리헨션
  • 언더스코어를 사용한 숫자 리터럴
  • 딕셔너리 순서 보장

python 3.6 에서 f string 등 다양한 기능이 추가됐다. 이제 python은 3.12 까지 나왔는데

3.6~3.12까지에서 새로 생긴 주요 기능들을 정리해본다.

 

 

Python 3.7:

  1. 데이터 클래스:
    from dataclasses import dataclass
    
    @dataclass
    class Point:
        x: float
        y: float
    설명: 간단한 클래스를 더 쉽게 정의할 수 있게 되었습니다. __init__, __repr__ 등의 메서드를 자동으로 생성합니다

  2. 타입 힌팅에서 지연 평가:
    from __future__ import annotations
    
    class Tree:
        def __init__(self, left: Tree, right: Tree):
            self.left = left
            self.right = right
    설명: 클래스 내에서 자기 자신을 참조하는 타입 힌팅이 가능해졌습니다.

  3. breakpoint() 내장 함수:
    def complex_function():
        # 복잡한 로직...
        breakpoint()  # 여기서 디버거가 실행됩니다
        # 더 복잡한 로직...
    설명: 코드 내에서 쉽게 디버거를 실행할 수 있게 되었습니다.

 

Python 3.8:

  1. 할당 표현식 (walrus operator) :
    if (n := len(data)) > 10:
        print(f"Data is too long ({n} elements, expected <= 10)")
    설명: 표현식 내에서 변수에 값을 할당하고 그 값을 즉시 사용할 수 있게 되었습니다.

  2. 위치 전용 매개변수 :
    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    설명: / 이전의 매개변수는 반드시 위치 인자로만 전달해야 합니다.

  3. f-strings에서 = 사용 :
    x = 10
    print(f"{x=}")  # 출력: x=10
    설명: 변수의 이름과 값을 동시에 출력할 수 있게 되었습니다.

Python 3.9:

  1. 딕셔너리 병합 및 갱신 연산자 :
    x = {"a": 1, "b": 2}
    y = {"b": 3, "c": 4}
    z = x | y  # {"a": 1, "b": 3, "c": 4}
    x |= y  # x는 이제 {"a": 1, "b": 3, "c": 4}
    설명: 딕셔너리를 더 쉽게 병합하고 갱신할 수 있게 되었습니다.
  2. 타입 힌팅에서 내장 컬렉션 타입 사용 :
    def process_items(items: list[int]):
        ...
    설명: typing 모듈을 임포트하지 않고도 내장 타입을 사용한 타입 힌팅이 가능해졌습니다.

Python 3.10:

  1. 구조적 패턴 매칭 :
    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"
    설명: switch-case와 유사하지만 더 강력한 패턴 매칭 기능이 추가되었습니다.
  2. 유니온 타입을 위한 새로운 문법 :
    def greet(name: str | None) -> str:
        if name is None:
            name = "stranger"
        return f"Hello, {name}!"
    설명: Union[str, None] 대신 str | None과 같은 더 간단한 문법을 사용할 수 있게 되었습니다.

Python 3.11:

  1. 예외 그룹 :
    def greet(name: str | None) -> str:
        if name is None:
            name = "stranger"
        return f"Hello, {name}!"
    설명: 여러 예외를 그룹으로 처리할 수 있게 되었습니다.
  2. 타입 힌팅에서 Self 타입 :
    from typing import Self
    
    class Shape:
        def set_scale(self, scale: float) -> Self:
            self.scale = scale
            return self
    설명: 메서드가 자신의 클래스 타입을 반환한다는 것을 명시할 수 있게 되었습니다.

Python 3.12:

  1. 타입 힌팅에서 타입 매개변수 문법 :
    type Point[T] = tuple[T, T]
    
    def distance(p1: Point[float], p2: Point[float]) -> float:
        return ((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)**0.5
    설명: 제네릭 타입 별칭을 더 쉽게 정의할 수 있게 되었습니다.
  2. f-strings에서 중첩된 따옴표 허용 :
    print(f"He said: {"I'm tired"}")
    설명: f-string 내에서 따옴표를 더 자유롭게 사용할 수 있게 되었습니다.