파이썬 버전별 변경 사항
파이썬 버전별 변경 사항
파이썬 구조와 문법은 지속해서 변경되고 있습니다. 어떤 문법이 어떤 버전에서 나왔고, 어떻게 유용하게 사용되는지 파악한다면 좀 더 우아한 코드를 작성하는데 도움이 될 것입니다.
1. Python 3.5 이상 버전의 신규문법
Python 버전별 출시 연도입니다. 여러분이 만약 2019년 이전에 나온 책을 보셨다면 match 문법이나 왈러스 연산자 챕터는 없을 것입니다.
파이썬 3버전 배포 날짜 입니다.
- 파이썬 3.0: 2008년 12월
- 파이썬 3.1: 2009년 6월
- 파이썬 3.2: 2011년 2월
- 파이썬 3.3: 2012년 9월
- 파이썬 3.4: 2014년 3월
- 파이썬 3.5: 2015년 9월
- 파이썬 3.6: 2016년 12월
- 파이썬 3.7: 2018년 6월
- 파이썬 3.8: 2019년 10월
- 파이썬 3.9: 2020년 10월
- 파이썬 3.10: 2021년 10월
중요한 버전 배포 날짜 입니다.
- 2000년 10월: 파이썬 2.0 릴리스
- 2008년 12월: 파이썬 3.0 릴리스
- 2020년 1월 1일: 파이썬 2 개발 및 지원 종료
1.1 Python 3.5
async
와await
: Python의 비동기 프로그래밍에 사용됩니다.async def
를 사용하여 코루틴을 정의하고,await
를 사용하여 코루틴이 완료될 때까지 기다릴 수 있습니다.
1.2 Python 3.6
- 딕셔너리에 순서가 생겼습니다. 3.6버전부터 순서가 지켜졌으나 공식 문서에는 3.7버전부터 들어가 있다고 나와있으니 코딩을 할 때에는 3.7버전부터 순서가 지켜진다는 것을 전재하고 코딩하는 것이 좋습니다.
- f-string: 문자열 내부에 중괄호
{}
를 사용하여 변수를 직접 삽입할 수 있습니다. 이를 통해 문자열 포매팅이 훨씬 쉬워졌습니다.name = 'Alice' print(f'Hello, {name}') - 변수 타입 힌트: 함수 인수와 반환 값에 대한 타입 정보를 제공하는 방법입니다. 이를 통해 개발자는 코드의 의도를 명확하게 표현할 수 있고, IDE와 linter는 이 정보를 사용하여 오류를 더 잘 잡아낼 수 있습니다.
def greet(name: str) -> str: return f'Hello, {name}'
def greet(name: str) -> str: return f'Hello, {name}'
1.3 Python 3.7
-
dataclasses
: 이 모듈은@dataclass
데코레이터를 제공하여 클래스를 간결하게 정의할 수 있게 합니다. 이 데코레이터는__init__
,__repr__
,__eq__
등의 특별한 메서드를 자동으로 추가합니다.# id, name, email이 각각 3번씩 반복 # -> 이러한 현상을 보일러 플레이트(boiler-plate)라 함 # -> print를 해도 필드값이 보이지 않아 불편 class User: def __init__(self, id, name, email): self.id = id self.name = name self.email = email
# id, name, email이 각각 3번씩 반복 # -> 이러한 현상을 보일러 플레이트(boiler-plate)라 함 # -> print를 해도 필드값이 보이지 않아 불편 class User: def __init__(self, id, name, email): self.id = id self.name = name self.email = email
# id, name, email이 각각 3번씩 반복 # -> 이러한 현상을 보일러 플레이트(boiler-plate)라 함 # -> print를 해도 필드값이 보이지 않아 불편 class User: def __init__(self, id, name, email): self.id = id self.name = name self.email = email def __repr__(self): return (f'{self.__class__.__qualname__}{self.id, self.name, self.email}') user = User(123, 'hojun', 'hojun@gmail') user # User(123, 'hojun', 'hojun@gmail') from dataclasses import dataclass @dataclass class User: id: int name: str email : str user = User(123, 'hojun', 'hojun@gmail') user
1.4 Python 3.8
- 왈러스 연산자
:=
: 이 연산자를 사용하면 표현식을 평가하고 그 결과를 변수에 할당할 수 있습니다. 이는 주로while
루프나if
문 같은 곳에서 사용됩니다.
1.5 Python 3.9
-
딕셔너리 결합 연산자: 딕셔너리의 병합과 업데이트를 위한 새로운 연산자
|
와|=
이 추가되었습니다.x = {"key1": "value1"} y = {"key2": "value2"} z = x | y z 아래와 같은 딕셔너리 언패킹은 3.5버전에서 나온 기능입니다.
x = {"key1": "value1"} y = {"key2": "value2"} z = {**x, **y} z
x = {"key1": "value1"} y = {"key2": "value2"} z = {**x, **y} z
Python 3.10
- 구조적 패턴 매칭(structural pattern matching) : 어떤 값을 기반으로 가능한 여러 조건 중 하나를 매칭하는 방법 (ex
Switch - Case
문)
# 패턴 예시
case "test" # 단일 값 "test"에 매칭
case ["a","b"] # ["a","b"]라는 컬렉션에 매칭
case ["a", value] : # 두 개의 값이 있는 컬렉션에 매칭하고, 두 번째 값을 캡처 변수 value에 저장
case ("a"|"b"|"c") : # or 연산자(|)를 사용해서 하나의 case 블록에서 여러 case를 처리, "a","b" 또는 "c"에 매칭
case ["z", _] # "z"로 시작하는 모든 컬렉션을 매칭
# 패턴 예시
case "test" # 단일 값 "test"에 매칭
case ["a","b"] # ["a","b"]라는 컬렉션에 매칭
case ["a", value] : # 두 개의 값이 있는 컬렉션에 매칭하고, 두 번째 값을 캡처 변수 value에 저장
case ("a"|"b"|"c") : # or 연산자(|)를 사용해서 하나의 case 블록에서 여러 case를 처리, "a","b" 또는 "c"에 매칭
case ["z", _] # "z"로 시작하는 모든 컬렉션을 매칭