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:
- 데이터 클래스:
설명: 간단한 클래스를 더 쉽게 정의할 수 있게 되었습니다. __init__, __repr__ 등의 메서드를 자동으로 생성합니다from dataclasses import dataclass @dataclass class Point: x: float y: float
- 타입 힌팅에서 지연 평가:
설명: 클래스 내에서 자기 자신을 참조하는 타입 힌팅이 가능해졌습니다.from __future__ import annotations class Tree: def __init__(self, left: Tree, right: Tree): self.left = left self.right = right
- breakpoint() 내장 함수:
설명: 코드 내에서 쉽게 디버거를 실행할 수 있게 되었습니다.def complex_function(): # 복잡한 로직... breakpoint() # 여기서 디버거가 실행됩니다 # 더 복잡한 로직...
Python 3.8:
- 할당 표현식 (walrus operator) :
설명: 표현식 내에서 변수에 값을 할당하고 그 값을 즉시 사용할 수 있게 되었습니다.if (n := len(data)) > 10: print(f"Data is too long ({n} elements, expected <= 10)")
- 위치 전용 매개변수 :
설명: / 이전의 매개변수는 반드시 위치 인자로만 전달해야 합니다.def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f)
- f-strings에서 = 사용 :
설명: 변수의 이름과 값을 동시에 출력할 수 있게 되었습니다.x = 10 print(f"{x=}") # 출력: x=10
Python 3.9:
- 딕셔너리 병합 및 갱신 연산자 :
설명: 딕셔너리를 더 쉽게 병합하고 갱신할 수 있게 되었습니다.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}
- 타입 힌팅에서 내장 컬렉션 타입 사용 :
설명: typing 모듈을 임포트하지 않고도 내장 타입을 사용한 타입 힌팅이 가능해졌습니다.def process_items(items: list[int]): ...
Python 3.10:
- 구조적 패턴 매칭 :
설명: switch-case와 유사하지만 더 강력한 패턴 매칭 기능이 추가되었습니다.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"
- 유니온 타입을 위한 새로운 문법 :
설명: Union[str, None] 대신 str | None과 같은 더 간단한 문법을 사용할 수 있게 되었습니다.def greet(name: str | None) -> str: if name is None: name = "stranger" return f"Hello, {name}!"
Python 3.11:
- 예외 그룹 :
설명: 여러 예외를 그룹으로 처리할 수 있게 되었습니다.def greet(name: str | None) -> str: if name is None: name = "stranger" return f"Hello, {name}!"
- 타입 힌팅에서 Self 타입 :
설명: 메서드가 자신의 클래스 타입을 반환한다는 것을 명시할 수 있게 되었습니다.from typing import Self class Shape: def set_scale(self, scale: float) -> Self: self.scale = scale return self
Python 3.12:
- 타입 힌팅에서 타입 매개변수 문법 :
설명: 제네릭 타입 별칭을 더 쉽게 정의할 수 있게 되었습니다.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
- f-strings에서 중첩된 따옴표 허용 :
설명: f-string 내에서 따옴표를 더 자유롭게 사용할 수 있게 되었습니다.print(f"He said: {"I'm tired"}")