Skip to content

Commit 8e54c87

Browse files
committed
Create Whats new in Python.md
1 parent 9194d7c commit 8e54c87

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed

docs/Whats new in Python.md

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
# **Python 최신 버전 개선점**
2+
3+
Python에서는 기존의 가장 큰 단점으로 꼽히던 속도 개선을 위한 Faster CPython 프로젝트를 진행하였다.
4+
5+
이를 통해 Python 3.11부터 본격적으로 해당 프로젝트의 결과가 적용되었으며, Python 3.11은 Python 3.10보다 10-60% 더 빨라졌다.
6+
7+
이후 Python 3.13까지 꾸준히 Faster CPython 프로젝트가 적용되어 다방면으로 속도 개선이 진행되고 있다.
8+
9+
## **Python 3.11**
10+
11+
### 새로운 표준 라이브러리 모듈
12+
13+
- **PEP 680**: `tomllib`을 추가하여 표준 라이브러리에서 TOML 파일을 직접 파싱할 수 있도록 지원한다.
14+
15+
### `requirements.txt` 대신 `pyproject.toml` 사용
16+
17+
많은 프로젝트에서 패키지 종속성을 관리할 때 `requirements.txt`를 사용하지만, Python에서는 공식적으로 `pyproject.toml`을 사용하는 것이 권장된다.
18+
19+
#### `requirements.txt`의 문제점
20+
1. **공식 표준이 아님**: `requirements.txt`는 관습적으로 사용된 파일일 뿐, Python의 공식 표준이 아니다.
21+
2. **의존성 관리의 불편함**: `dev-requirements.txt`, `test-requirements.txt` 등 별도의 파일을 만들어야 하므로 관리가 번거롭다.
22+
23+
#### `pyproject.toml`을 사용하면?
24+
1. **PEP 518 표준을 따르는 공식적인 방식**으로 관리할 수 있다.
25+
2. **환경별 의존성 관리가 가능**하여 개발 환경과 배포 환경을 쉽게 구분할 수 있다.
26+
27+
#### 사용 예시
28+
```toml
29+
[tool.poetry]
30+
name = "my_project"
31+
version = "0.1.0"
32+
description = "My Python Project"
33+
authors = ["Your Name <your.email@example.com>"]
34+
35+
[tool.poetry.dependencies]
36+
python = "^3.10"
37+
requests = "^2.28.0"
38+
numpy = "^1.23.0"
39+
40+
[tool.poetry.group.dev.dependencies]
41+
pytest = "^7.1.2"
42+
black = "^22.6.0"
43+
```
44+
45+
패키지를 설치할 때는 `pip install .` 또는 `poetry install`을 사용한다.
46+
47+
## **Python 3.12**
48+
49+
### 새로운 문법 추가 (PEP 701, f-string 개선)
50+
51+
기존 f-string의 제한을 완화하여 더욱 강력하게 사용할 수 있도록 개선되었다.
52+
53+
#### 개선된 사항
54+
1. 같은 따옴표(`'` 또는 `"` )를 재사용할 수 있다.
55+
2. 여러 줄 표현과 주석을 지원한다.
56+
3. 백슬래시(\) 및 유니코드 문자를 사용할 수 있다.
57+
4. 에러 메시지가 더욱 명확하게 제공된다.
58+
59+
#### 예제 코드
60+
```python
61+
songs = ["Take me back to Eden", "Alkaline", "Ascensionism"]
62+
print(f"This is the playlist: {', '.join(songs)}")
63+
64+
playlist = f"""
65+
This is the playlist: {", ".join([
66+
"Take me back to Eden", # 첫 번째 곡
67+
"Alkaline", # 두 번째 곡
68+
"Ascensionism" # 세 번째 곡
69+
])}
70+
"""
71+
print(playlist)
72+
```
73+
74+
### 새로운 타입 어노테이션 추가 (PEP 695)
75+
76+
Python 3.12에서는 제네릭(Generic) 타입을 보다 간결하게 정의할 수 있도록 개선되었다.
77+
78+
#### 개선된 사항
79+
1. `TypeVar`을 선언할 필요 없이 `[T]`를 바로 사용할 수 있다.
80+
2. `type` 키워드를 활용하여 타입 별칭(Alias)을 선언할 수 있다.
81+
3. Bound 및 Constraints 적용이 더욱 간결해졌다.
82+
83+
#### 예제 코드
84+
```python
85+
def max[T](args: Iterable[T]) -> T:
86+
return max(args)
87+
88+
class List[T]:
89+
def __getitem__(self, index: int) -> T:
90+
...
91+
def append(self, element: T) -> None:
92+
...
93+
94+
type Point = tuple[float, float]
95+
type Point[T] = tuple[T, T]
96+
type HashableSequence[T: Hashable] = Sequence[T]
97+
type IntOrStrSequence[T: (int, str)] = Sequence[T]
98+
```
99+
100+
## **Python 3.13**
101+
102+
### GIL 제거 지원 (Free-threaded CPython, PEP 703)
103+
104+
기존 Python은 GIL(Global Interpreter Lock)로 인해 멀티코어를 활용하기 어려웠다. Python 3.13에서는 실험적으로 GIL을 비활성화할 수 있는 Free-threaded 모드가 추가되었다.
105+
106+
#### 주요 특징
107+
- 기본적으로 GIL이 활성화되어 있지만, `python3.13t` 실행 파일을 사용하면 GIL 없이 실행할 수 있다.
108+
- 실행 방법:
109+
```bash
110+
python3.13t # GIL이 없는 실행 파일 사용
111+
python3.13 -X gil=0 # 기존 실행 파일에서 GIL 제거 모드 실행
112+
```
113+
- 현재는 실험적인 기능이며 일부 성능 저하가 있을 수 있다.
114+
115+
#### GIL 상태 확인 방법
116+
```python
117+
import sys
118+
print(sys._is_gil_enabled()) # False면 GIL이 비활성화된 상태
119+
```
120+
121+
### JIT(Just-In-Time) 컴파일러 도입
122+
123+
Python 3.13에서는 JIT 컴파일러가 실험적으로 추가되어 실행 속도를 향상시킬 수 있다.
124+
125+
#### 주요 특징
126+
- 자주 실행되는 바이트코드를 기계어로 변환하여 실행 속도를 높인다.
127+
- 실행 방법:
128+
```bash
129+
python3.13 --enable-experimental-jit # JIT 활성화
130+
```
131+
- 설정 옵션:
132+
- `--enable-experimental-jit=yes`: JIT 활성화
133+
- `--enable-experimental-jit=no`: JIT 비활성화
134+
- `PYTHON_JIT=1`: 런타임에서 JIT 활성화
135+
136+
## 결론
137+
138+
Python 3.11부터 3.13까지 지속적인 성능 개선과 새로운 기능이 추가되었다. 특히, f-string 개선, 타입 어노테이션 간소화, GIL 제거 지원, JIT 컴파일러 도입 등이 주목할 만하다. 이러한 변화들을 적극 활용하면 상황에 맞게 더욱 효율적인 Python 코드를 작성할 수 있다.
139+

0 commit comments

Comments
 (0)