Skip to content

Commit 1d5f6eb

Browse files
committed
Update Zen of Python.md
1 parent 187e63a commit 1d5f6eb

File tree

1 file changed

+69
-17
lines changed

1 file changed

+69
-17
lines changed

docs/Zen of Python.md

Lines changed: 69 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
# **Zen of Python**
2+
23
[PEP 20 – The Zen of Python](https://peps.python.org/pep-0020/)은 Python 설계에 대한 지침 원칙을 20개의 격언으로 간결하게 정리한 내용을 다루며, 그중에 19개의 격언만 기록되어 아래와 같이 `import this`를 통해 확인할 수 있다.
34

4-
The Zen of Python, by [Tim Peters](https://en.wikipedia.org/wiki/Tim_Peters_(software_engineer))
5+
The Zen of Python, by [Tim Peters](<https://en.wikipedia.org/wiki/Tim_Peters_(software_engineer)>)
6+
57
```python
68
import this
79
```
810

911
## 1. Beautiful is better than ugly.
12+
1013
**해석**: 아름다운 것이 못생긴 것보다 낫다.
1114
**의미**: 코드는 기능뿐만 아니라 읽기 쉽고 보기 좋아야 한다. 가독성과 구조적인 아름다움을 위해 노력하라.
12-
즉, 코드가 명료하고, 읽는 사람에게 스트레스를 주지 않도록 작성하는 것을 목표로 한다.
15+
즉, 코드가 명료하고, 읽는 사람에게 스트레스를 주지 않도록 작성하는 것을 목표로 한다.
1316

1417
**Bad Code Example**:
18+
1519
```python
1620
a=[1,2,3]
1721
b=[]
@@ -21,6 +25,7 @@ for i in a:
2125
```
2226

2327
**Good Code Example**:
28+
2429
```python
2530
numbers = [1, 2, 3]
2631
even_numbers = [n for n in numbers if n % 2 == 0]
@@ -29,17 +34,20 @@ even_numbers = [n for n in numbers if n % 2 == 0]
2934
---
3035

3136
## 2. Explicit is better than implicit.
37+
3238
**해석**: 명시적인 것이 암시적인 것보다 낫다.
3339
**의미**: 의도를 명확히 표현하라. 코드가 무엇을 하고 있는지 쉽게 이해할 수 있어야 한다.
34-
즉, 코드의 동작이 숨겨져 있지 않고, 모든 동작이 명확하게 드러나도록 작성한다.
40+
즉, 코드의 동작이 숨겨져 있지 않고, 모든 동작이 명확하게 드러나도록 작성한다.
3541

3642
**Bad Code Example**:
43+
3744
```python
3845
from math import *
3946
print(sqrt(4))
4047
```
4148

4249
**Good Code Example**:
50+
4351
```python
4452
import math
4553
print(math.sqrt(4)) # 'sqrt'가 어디에서 왔는지 명확히 알 수 있음
@@ -48,11 +56,13 @@ print(math.sqrt(4)) # 'sqrt'가 어디에서 왔는지 명확히 알 수 있음
4856
---
4957

5058
## 3. Simple is better than complex.
59+
5160
**해석**: 단순한 것이 복잡한 것보다 낫다.
5261
**의미**: 불필요한 복잡성을 줄이고 간결하게 작성하라.
53-
즉, 단순한 코드가 유지 보수와 디버깅에 유리하며, 다른 사람이 이해하기 쉽다.
62+
즉, 단순한 코드가 유지 보수와 디버깅에 유리하며, 다른 사람이 이해하기 쉽다.
5463

5564
**Bad Code Example**:
65+
5666
```python
5767
def add(a, b):
5868
if type(a) == int and type(b) == int:
@@ -62,6 +72,7 @@ def add(a, b):
6272
```
6373

6474
**Good Code Example**:
75+
6576
```python
6677
def add(a: int, b: int) -> int:
6778
return a + b
@@ -70,18 +81,21 @@ def add(a: int, b: int) -> int:
7081
---
7182

7283
## 4. Complex is better than complicated.
84+
7385
**해석**: 복잡한 것이 난해한 것보다 낫다.
7486
**의미**: 복잡성이 필요한 경우에도, 그것이 난해하거나 이해하기 어렵지 않도록 명확한 구조를 유지하라.
75-
즉, 복잡한 문제를 해결할 때도 코드가 이해 가능하고 명확해야 한다.
87+
즉, 복잡한 문제를 해결할 때도 코드가 이해 가능하고 명확해야 한다.
7688

7789
**Bad Code Example**:
90+
7891
```python
7992
def process(data):
8093
# 많은 작업을 한 함수에 몰아넣음
8194
return [x**2 for x in data if x > 0 and isinstance(x, int)]
8295
```
8396

8497
**Good Code Example**:
98+
8599
```python
86100
def filter_positive_integers(data):
87101
return [x for x in data if x > 0 and isinstance(x, int)]
@@ -97,11 +111,13 @@ result = square_numbers(filtered_data)
97111
---
98112

99113
## 5. Flat is better than nested.
114+
100115
**해석**: 평평한 구조가 중첩된 것보다 낫다.
101116
**의미**: 코드 계층을 최소화하고, 지나치게 중첩된 구조를 피하라.
102-
즉, 깊은 중첩은 코드의 가독성과 디버깅을 어렵게 한다.
117+
즉, 깊은 중첩은 코드의 가독성과 디버깅을 어렵게 한다.
103118

104119
**Bad Code Example**:
120+
105121
```python
106122
for i in range(3):
107123
for j in range(3):
@@ -110,6 +126,7 @@ for i in range(3):
110126
```
111127

112128
**Good Code Example**:
129+
113130
```python
114131
from itertools import product
115132

@@ -120,16 +137,19 @@ for i, j, k in product(range(3), repeat=3):
120137
---
121138

122139
## 6. Sparse is better than dense.
140+
123141
**해석**: 나눠진 것이 밀집된 것보다 낫다.
124142
**의미**: 코드를 한 줄에 지나치게 압축하지 말고, 읽기 쉽게 분리하라.
125-
즉, 지나치게 압축된 코드는 읽기 어렵고, 유지 보수성을 해친다.
143+
즉, 지나치게 압축된 코드는 읽기 어렵고, 유지 보수성을 해친다.
126144

127145
**Bad Code Example**:
146+
128147
```python
129148
if x > 0: print("Positive"); y = x**2
130149
```
131150

132151
**Good Code Example**:
152+
133153
```python
134154
if x > 0:
135155
print("Positive")
@@ -139,17 +159,20 @@ if x > 0:
139159
---
140160

141161
## 7. Readability counts.
162+
142163
**해석**: 읽기 쉬운 것이 중요하다.
143164
**의미**: 코드를 작성할 때 가독성을 항상 염두에 두어라.
144-
즉, 다른 사람이 코드를 쉽게 이해할 수 있도록 돕는다.
165+
즉, 다른 사람이 코드를 쉽게 이해할 수 있도록 돕는다.
145166

146167
**Bad Code Example**:
168+
147169
```python
148170
x, y, z = 1, 2, 3
149171
print(z, y, x)
150172
```
151173

152174
**Good Code Example**:
175+
153176
```python
154177
first, second, third = 1, 2, 3
155178
print(third, second, first)
@@ -158,11 +181,13 @@ print(third, second, first)
158181
---
159182

160183
## 8. Special cases aren't special enough to break the rules. Although practicality beats purity.
184+
161185
**해석**: 특별한 경우가 규칙을 깰 만큼 특별하지는 않다. 하지만 실용성이 순수성보다 우선한다.
162186
**의미**: 규칙은 중요하지만, 실용적인 해결책이 필요할 때는 융통성을 발휘하라.
163-
즉, 원칙을 고수하면서도, 현실적인 제약을 고려해 실용적인 코드를 작성한다.
187+
즉, 원칙을 고수하면서도, 현실적인 제약을 고려해 실용적인 코드를 작성한다.
164188

165189
**Bad Code Example**:
190+
166191
```python
167192
def divide(a, b):
168193
if b == 0:
@@ -171,6 +196,7 @@ def divide(a, b):
171196
```
172197

173198
**Good Code Example**:
199+
174200
```python
175201
def divide(a, b):
176202
if b == 0:
@@ -181,11 +207,13 @@ def divide(a, b):
181207
---
182208

183209
## 9. Errors should never pass silently. Unless explicitly silenced.
210+
184211
**해석**: 에러는 결코 조용히 지나가지 않는다. 알고도 침묵하지 않는 한.
185212
**의미**: 에러를 무시하지 말고 적절히 처리하라.
186-
즉, 디버깅과 문제 해결을 쉽게 하기 위해 에러를 명확히 드러내고 관리한다.
213+
즉, 디버깅과 문제 해결을 쉽게 하기 위해 에러를 명확히 드러내고 관리한다.
187214

188215
**Bad Code Example**:
216+
189217
```python
190218
try:
191219
1 / 0
@@ -194,6 +222,7 @@ except:
194222
```
195223

196224
**Good Code Example**:
225+
197226
```python
198227
try:
199228
1 / 0
@@ -204,11 +233,13 @@ except ZeroDivisionError as e:
204233
---
205234

206235
## 10. In the face of ambiguity, refuse the temptation to guess.
236+
207237
**해석**: 모호한 상황에서는 추측하려는 유혹을 뿌리쳐라.
208238
**의미**: 코드는 항상 명확해야 하며, 모호한 로직을 남겨두지 않도록 설계하라.
209-
즉, 코드를 읽는 사람이 의도를 오해하지 않도록 작성한다.
239+
즉, 코드를 읽는 사람이 의도를 오해하지 않도록 작성한다.
210240

211241
**Bad Code Example**:
242+
212243
```python
213244
def get_status(code):
214245
if code == 1:
@@ -218,6 +249,7 @@ def get_status(code):
218249
```
219250

220251
**Good Code Example**:
252+
221253
```python
222254
def get_status(code):
223255
if code == 1:
@@ -231,36 +263,42 @@ def get_status(code):
231263
---
232264

233265
## 11. There should be one-- and preferably only one --obvious way to do it.
266+
234267
**해석**: 하나의 명확하고 선호되는 방법이 있어야 한다.
235268
**의미**: 동일한 결과를 도출하는 다양한 방법이 있더라도, 가장 직관적이고 간단한 방법을 선택하라.
236-
즉, 코드를 작성할 때 명확하고 표준적인 방식을 따름으로써 협업과 유지 보수를 용이하게 한다.
269+
즉, 코드를 작성할 때 명확하고 표준적인 방식을 따름으로써 협업과 유지 보수를 용이하게 한다.
237270

238271
**Bad Code Example**:
272+
239273
```python
240274
result = []
241275
for i in range(10):
242276
result.append(i * 2)
243277
```
244278

245279
**Good Code Example**:
280+
246281
```python
247282
result = [i * 2 for i in range(10)] # Pythonic한 방식
248283
```
249284

250285
---
251286

252287
## 12. Now is better than never. Although never is often better than right now.
288+
253289
**해석**: 지금 하는 것이 하지 않는 것보다 낫다. 하지만 지금 당장 하는 것이 항상 옳은 것은 아니다.
254290
**의미**: 작업을 미루지 말되, 신중하게 실행하라. 필요 없는 조급함은 피하라.
255-
즉, 너무 서두르지 않으면서도, 중요한 작업은 시기적절하게 처리한다.
291+
즉, 너무 서두르지 않으면서도, 중요한 작업은 시기적절하게 처리한다.
256292

257293
**Bad Code Example**:
294+
258295
```python
259296
def process_data(data):
260297
return data.split(",") # 데이터 구조를 고려하지 않고 서둘러 처리
261298
```
262299

263300
**Good Code Example**:
301+
264302
```python
265303
def process_data(data):
266304
if not isinstance(data, str):
@@ -271,17 +309,20 @@ def process_data(data):
271309
---
272310

273311
## 13. If the implementation is hard to explain, it's a bad idea.
312+
274313
**해석**: 구현을 설명하기 어렵다면, 그것은 나쁜 아이디어다.
275314
**의미**: 코드는 명확하고 간단해야 하며, 쉽게 설명할 수 있어야 한다.
276-
즉, 복잡한 코드를 피하고, 쉽게 이해할 수 있는 로직을 작성한다.
315+
즉, 복잡한 코드를 피하고, 쉽게 이해할 수 있는 로직을 작성한다.
277316

278317
**Bad Code Example**:
318+
279319
```python
280320
def f(a, b):
281321
return (a ** b) / ((a + b) ** 0.5) if a > b else (b ** a) / ((a + b) ** 0.5)
282322
```
283323

284324
**Good Code Example**:
325+
285326
```python
286327
def compute_ratio(a, b):
287328
if a > b:
@@ -293,19 +334,21 @@ def compute_ratio(a, b):
293334
---
294335

295336
## 14. If the implementation is easy to explain, it may be a good idea.
337+
296338
**해석**: 구현을 쉽게 설명할 수 있다면, 그것은 좋은 아이디어일 수 있다.
297339
**의미**: 간단하고 명료한 로직이 포함된 코드를 작성하라.
298-
즉, 다른 개발자와 협업 시, 의사소통이 원활하게 이루어지도록 돕는다.
299-
340+
즉, 다른 개발자와 협업 시, 의사소통이 원활하게 이루어지도록 돕는다.
300341

301342
---
302343

303344
## 15. Namespaces are one honking great idea -- let's do more of those!
345+
304346
**해석**: 네임스페이스는 정말 멋진 아이디어다. 더 많이 사용하자!
305347
**의미**: 충돌을 방지하기 위해 네임스페이스를 활용하라.
306-
즉, 코드의 모듈화와 충돌 없는 확장이 가능하도록 설계한다.
348+
즉, 코드의 모듈화와 충돌 없는 확장이 가능하도록 설계한다.
307349

308350
**Good Code Example**:
351+
309352
```python
310353
import my_module.utilities as utils
311354

@@ -315,4 +358,13 @@ result = utils.process_data(data)
315358
---
316359

317360
## 결론
361+
318362
Zen of Python의 가이드는 Pythonic한 코드 작성을 돕는 철학과 원칙을 제공한다. 이를 실천함으로써 더욱 명확하고 유지 보수 가능한 코드를 작성할 수 있다.
363+
364+
Zen of Python에 대한 해석은 사람마다 다르며, 여기에 대해 궁금한 사람들은 아래 자료들을 살펴보라.
365+
366+
## 다른 사람들의 해석
367+
368+
- [realpython.com/zen-of-python](https://realpython.com/zen-of-python/)
369+
- [the-zen-of-python-explained-with-examples](https://www.codeconquest.com/blog/the-zen-of-python-explained-with-examples/)
370+
- [파이썬의 선: the-zen-of-python](https://tyoon9781.tistory.com/entry/the-zen-of-python)

0 commit comments

Comments
 (0)