Skip to content

Commit

Permalink
[6e7639a] λ²ˆμ—­ μš”μ²­ πŸ’¬ (#27)
Browse files Browse the repository at this point in the history
* merge 6e7639a πŸ›°

* [6e7639a] λ²ˆμ—­

* [6e7639a] build
  • Loading branch information
Sotaneum authored Oct 8, 2023
1 parent 38650e7 commit fafedbc
Show file tree
Hide file tree
Showing 16 changed files with 552 additions and 724 deletions.
243 changes: 108 additions & 135 deletions Google Python Style Guide kor.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,41 @@

### 2.13 Properties

- `Properties`을 μ ‘κ·Όν•˜κ±°λ‚˜ 데이터값을 μ„€μ •ν•  λ•Œ 보톡 κ°„λ‹¨ν•œ 방법인 κ°€λ²Όμš΄ μ ‘κ·Όμžλ‚˜ `setter` λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.
- `Properties`λŠ” κ°„λ‹¨ν•œ κ³„μ‚°μ΄λ‚˜ 둜직이 ν•„μš”ν•œ attribute을 κ°€μ Έμ˜€κ±°λ‚˜ μ„€μ •ν•˜λŠ” 것을 μ œμ–΄ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
- `Properties` κ΅¬ν˜„μ€ λ³΄ν†΅μ˜ attribute 접근에 λŒ€ν•œ 일반적인 κΈ°λŒ€μ™€ μΌμΉ˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

<a id="s2.13.1-definition"></a>

#### 2.13.1 μ •μ˜

- κ°„λ‹¨ν•œ 계산을 ν•  λ•Œ 일반적인 속성을 μ ‘κ·Όν•˜λ“―μ΄ 속성을 κ°€μ Έμ˜€κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ„œλ“œ ν˜ΈμΆœμ„ 포μž₯ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
- 일반적인 속성을 μ ‘κ·Όν•˜λ“―μ΄ 속성을 κ°€μ Έμ˜€κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ„œλ“œ ν˜ΈμΆœμ„ 포μž₯ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

<a id="s2.13.2-pros"></a>

#### 2.13.2 μž₯점

- κ°„λ‹¨ν•œ 속성 접근에 λŒ€ν•΄ λͺ…μ‹œμ μΈ `get`, `set` λ©”μ„œλ“œ ν˜ΈμΆœμ„ μ œκ±°ν•¨μœΌλ‘œμ¨ 가독성이 μ¦κ°€ν•©λ‹ˆλ‹€.
- getter, setter method 호좜 λŒ€μ‹  attribute μ ‘κ·Ό 및 ν• λ‹Ή APIλ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.
- attributeλ₯Ό 읽기 μ „μš©μœΌλ‘œ λ§Œλ“œλŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- [λŠκΈ‹ν•œ 계산법](https://ko.wikipedia.org/wiki/λŠκΈ‹ν•œ_계산법)을 ν—ˆμš©ν•©λ‹ˆλ‹€.
- 클래슀의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μœ μ§€ν•˜λŠ” λ°©λ²•μœΌλ‘œ [Pythonic](https://github.com/Yosseulsin-JOB/Google-Python-Style-Guide-kor/wiki/2.13-properties#pythonic)을 κ³ λ €ν•©λ‹ˆλ‹€.
- μ„±λŠ₯ μΈ‘λ©΄μ—μ„œ, trivial μ ‘κ·Όμž λ©”μ„œλ“œλŠ” 직접 λ³€μˆ˜ 접근이 합리적일 λ•Œ 속성 우회λ₯Ό ν—ˆμš©ν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μΈν„°νŽ˜μ΄μŠ€λ₯Ό νŒŒκ΄΄ν•˜μ§€ μ•Šκ³  λ―Έλž˜μ— μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•  수 있게 ν•©λ‹ˆλ‹€.
- λ‚΄λΆ€κ°€ class μ‚¬μš©μžμ™€ λ…λ¦½μ μœΌλ‘œ λ°œμ „ν•  λ•Œ 클레슀의 public interfaceλ₯Ό μœ μ§€ κ΄€λ¦¬ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.

<a id="s2.13.3-cons"></a>

#### 2.13.3 단점

- μ—°μ‚°μž μ˜€λ²„ λ‘œλ”©(operator overloading)κ³Ό 같은 λΆ€μž‘μš©μ„ 숨길 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μœ„ 클래슀의 경우 ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.
- μ—°μ‚°μž μ˜€λ²„ λ‘œλ”©(operator overloading)κ³Ό 같은 λΆ€μž‘μš©μ„ 숨길 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•˜μœ„ 클래슀의 경우 ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

<a id="s2.13.4-decision"></a>

#### 2.13.4 κ²°λ‘ 

- μƒˆ μ½”λ“œμ—μ„œ 속성을 μ‚¬μš©ν•˜μ—¬ 일반적으둜 κ°€λ²Όμš΄ μ ‘κ·Όμž λ˜λŠ” `setter` λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν–ˆλ˜ 데이터λ₯Ό μ ‘κ·Όν•˜κ±°λ‚˜ μ„€μ •ν•©λ‹ˆλ‹€.
- 속성은 `@property` [decorator](#s2.17-function-and-method-decorators)둜 λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.
- 속성 μžμ²΄κ°€ μž¬μ •μ˜λ˜μ§€ μ•Šμ€ 경우 속성에 λŒ€ν•œ 상속은 λͺ…λ°±ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ 된 λ©”μ„œλ“œκ°€ 속성에 μ˜ν•΄ ν˜ΈμΆœλ˜λ„λ‘ν•˜λ €λ©΄ μ ‘κ·Όμž λ©”μ„œλ“œλ₯Ό κ°„μ ‘μ μœΌλ‘œ ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€([template method design pattern](https://en.wikipedia.org/wiki/Template_method_pattern)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.).
- μ˜¬λ°”λ₯Έ 예

```python
import math
class Square:
"""두 가지 속성을 가진 μ‚¬κ°ν˜•: μ“°κΈ° κ°€λŠ₯ν•œ 면적(area)κ³Ό μ½κΈ°μ „μš©μΈ λ‘˜λ ˆ(perimeter)
μ‚¬μš©λ°©λ²•:
>>> sq = Square(3)
>>> sq.area
9
>>> sq.perimeter
12
>>> sq.area = 16
>>> sq.side
4
>>> sq.perimeter
16
"""

def __init__(self, side: float):
self.side = side

@property
def area(self) -> float:
"""μ‚¬κ°ν˜•μ˜ 면적을 κ°€μ Έμ˜€κ±°λ‚˜ μ„€μ •ν•©λ‹ˆλ‹€."""
return self._get_area()

@area.setter
def area(self, area: float):
self._set_area(area)

def _get_area(self) -> float:
"""'면적'속성을 κ³„μ‚°ν•˜κΈ° μœ„ν•œ κ°„μ ‘ μ ‘κ·Όμžμž…λ‹ˆλ‹€."""
return self.side ** 2

def _set_area(self, area: float):
"""'면적' 속성을 μ„€μ •ν•˜κΈ° μœ„ν•œ κ°„μ ‘ μ„€μ •μžμž…λ‹ˆλ‹€."""
self.side = math.sqrt(area)

@property
def perimeter(self) -> float:
return self.side * 4
```
- PropertiesλŠ” ν—ˆμš©ν•˜μ§€λ§Œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•˜λ©° 일반적인 attribute 접근에 λŒ€ν•œ κΈ°λŒ€μ™€ μΌμΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€
- 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” [getters and setters](#getters-and-setters)κ·œμΉ™μ„ λ”°λ₯΄μ„Έμš”.
- 예λ₯Ό λ“€μ–΄, λ‹¨μˆœνžˆ attributeλ₯Ό κ°€μ Έμ˜€κ³  μ„€μ •ν•˜κΈ° μœ„ν•΄ propertyλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- 계산이 λ°œμƒν•˜μ§€ μ•ŠμœΌλ―€λ‘œ propertyλŠ” λΆˆν•„μš”ν•©λ‹ˆλ‹€. ([λŒ€μ‹  attributeλ₯Ό public으둜 μ„€μ •ν•©λ‹ˆλ‹€.](#getters-and-setters))
- 이에 λΉ„ν•΄ attribute 접근을 μ œμ–΄ν•˜κ±°λ‚˜ μ‚¬μ†Œν•œ νŒŒμƒ 값을 κ³„μ‚°ν•˜κΈ° μœ„ν•΄ propertyλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 ν—ˆμš©λ©λ‹ˆλ‹€.
- λ‘œμ§μ€ κ°„λ‹¨ν•˜κ³  λ†€λžμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- PropertiesλŠ” `@property` [decorator](#s2.17-function-and-method-decorators)λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±ν•΄μ•Όν•©λ‹ˆλ‹€.
- property descriptorλ₯Ό μˆ˜λ™μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 것은 [power feature](#power-features)둜 κ°„μ£Όλ©λ‹ˆλ‹€.
- 속성에 λŒ€ν•œ 상속은 λͺ…λ°±ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. subclassκ°€ μž¬μ •μ˜ν•˜κ³  ν™•μž₯ν•˜κΈ° μœ„ν•œ 계산 λ„κ΅¬λ‘œ propertiesλ₯Ό μ‚¬μš©ν•˜μ§€ λ§ˆμ„Έμš”.
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,6 @@
if not users:
print('μ‚¬μš©μžκ°€ μ—†μŠ΅λ‹ˆλ‹€.')

if foo == 0:
self.handle_zero()

if i % 10 == 0:
self.handle_multiple_of_ten()

Expand All @@ -59,9 +56,6 @@
if len(users) == 0:
print('μ‚¬μš©μžκ°€ μ—†μŠ΅λ‹ˆλ‹€.')

if foo is not None and not foo:
self.handle_zero()

if not i % 10:
self.handle_multiple_of_ten()

Expand All @@ -70,3 +64,4 @@
```

- `'0'`(즉, `0` λ¬Έμžμ—΄)은 참으둜 ν‰κ°€ν•œλ‹€λŠ” 점에 μœ μ˜ν•΄μ•Όν•©λ‹ˆλ‹€.
- Numpy 배열은 μ•”μ‹œμ  boolean μ»¨ν…μŠ€νŠΈμ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. `np.array`의 λΉ„μ–΄ μžˆμŒμ„ ν…ŒμŠ€νŠΈν•  λ•Œ `.size` attributeλ₯Ό μ„ ν˜Έν•©λ‹ˆλ‹€. (e.g. `if not users.size`)
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@

#### 2.17.3 단점

- DecoratorλŠ” ν•¨μˆ˜μ˜ 인자, λ°˜ν™˜ 값에 λŒ€ν•΄ μž„μ˜μ˜ λ™μž‘μ„ μˆ˜ν–‰ν•  수 있으며 결과적으둜 λ†€λΌμš΄ 암묡적 행동을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ²Œλ‹€κ°€, DecoratorλŠ” importν•  λ•Œ μ‹€ν–‰ν•©λ‹ˆλ‹€. 잘λͺ»λœ Decorator μ½”λ“œλŠ” 회볡이 거의 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
- DecoratorλŠ” ν•¨μˆ˜μ˜ 인자, λ°˜ν™˜ 값에 λŒ€ν•΄ μž„μ˜μ˜ λ™μž‘μ„ μˆ˜ν–‰ν•  수 있으며 결과적으둜 λ†€λΌμš΄ 암묡적 행동을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- κ²Œλ‹€κ°€, DecoratorλŠ” object μ •μ˜ μ‹œ μ‹€ν–‰ν•©λ‹ˆλ‹€. module-level 객체(classes, module functions, ...)의 경우 importν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.
- Decorator μ½”λ“œ 였λ₯˜λŠ” 볡ꡬ가 거의 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

<a id="s2.17.4-decision"></a>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@

### 2.2 Imports

- `import`문을 μ‚¬μš©ν• λ•Œ package와 module을 λŒ€μƒμœΌλ‘œλ§Œ μ‚¬μš©ν•΄μ•Όν•˜κ³  각각의 ν΄λž˜μŠ€λ‚˜ ν•¨μˆ˜μ— λŒ€ν•΄ μ‚¬μš©ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. λ‹€λ§Œ
[typing λͺ¨λ“ˆ](#s3.19.12-imports),
[typing_extensions module](https://github.com/python/typing/tree/master/typing_extensions),
그리고 [six.moves module](https://six.readthedocs.io/#module-six.moves)
을 μ‚¬μš©ν• λ•ŒλŠ” μ˜ˆμ™Έμž…λ‹ˆλ‹€.
- `import`문을 μ‚¬μš©ν• λ•Œ package와 module에 μ‚¬μš©ν•˜κ³  κ°œλ³„ ν΄λž˜μŠ€λ‚˜ ν•¨μˆ˜μ— λŒ€ν•΄ μ‚¬μš©ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. λ‹€λ§Œ [typing λͺ¨λ“ˆ](#s3.19.12-imports), [typing_extensions module](https://github.com/python/typing/tree/master/typing_extensions)μ—μ„œ κ°€μ Έμ˜¨ 클래슀 및 [six.moves module](https://six.readthedocs.io/#module-six.moves)μ—μ„œμ˜ λ¦¬λ””λ ‰μ…˜μ€ 이 κ·œμΉ™μ—μ„œ μ œμ™Έλ©λ‹ˆλ‹€.

<a id="s2.2.1-definition"></a>

Expand Down Expand Up @@ -45,4 +41,4 @@

- importλœκ²ƒλ“€κ³Ό κ΄€λ ¨μžˆλŠ” 이름을 μ‚¬μš©ν•˜μ§€λ§ˆμ„Έμš”.
- λͺ¨λ“ˆμ΄ 같은 νŒ¨ν‚€μ§€μ— μžˆλ”λΌλ„ 전체 νŒ¨ν‚€μ§€ 이름을 μ‚¬μš©ν•˜μ„Έμš”.
- μ΄λŠ” 무심코 νŒ¨ν‚€μ§€λ₯Ό λ‘λ²ˆ import ν•˜λŠ”κ²ƒμ„ μ˜ˆλ°©ν•˜λŠ” 것에 도움이 λ©λ‹ˆλ‹€.
- μ΄λŠ” 무심코 νŒ¨ν‚€μ§€λ₯Ό λ‘λ²ˆ import ν•˜λŠ”κ²ƒμ„ μ˜ˆλ°©ν•˜λŠ” 것에 도움이 λ©λ‹ˆλ‹€.
Original file line number Diff line number Diff line change
@@ -1,46 +1,61 @@
<a id="s2.20-modern-python"></a>

### 2.20 Modern Python : Python 3 그리고 from, \_\_future\_\_, imports
### 2.20 Modern Python : from, \_\_future\_\_, imports

- Python 3 버전이 λ‚˜μ™”μŠ΅λ‹ˆλ‹€! 아직 ν”„λ‘œμ νŠΈμ— Python 3을 μ‚¬μš©ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλŠ” 건 μ•„λ‹ˆμ§€λ§Œ λͺ¨λ“  μ½”λ“œλŠ” ν˜Έν™˜λ˜λ„λ‘ μž‘μ„±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. (κ°€λŠ₯ν•œ κ²½μš°μ— Python 3에 따라 ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€.)
- μƒˆλ‘œμš΄ μ–Έμ–΄ 버전 의미 체계 λ³€κ²½ 사항은 이전 λŸ°νƒ€μž„ λ‚΄μ—μ„œ 파일 λ‹¨μœ„λ‘œ ν™œμ„±ν™”ν•˜κΈ° μœ„ν•΄ νŠΉλ³„ν•œ ν–₯ν›„ κ°€μ Έμ˜€κΈ° 뒀에 μ œμ–΄λ  수 μžˆμŠ΅λ‹ˆλ‹€.
(New language version semantic changes may be gated behind a special future import to enable them on a per-file basis within earlier runtimes.)

<a id="s2.20.1-definition"></a>

#### 2.20.1 μ •μ˜

- Python 3λŠ” Pythonμ–Έμ–΄μ—μ„œ μ€‘μš”ν•œ λ³€ν™”κ°€ μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” μ½”λ“œλŠ” 2.7 버전을 μ—Όλ‘ν•˜μ—¬ μž‘μ„±ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.
- Python3μ—μ„œ μˆ˜μ •μ—†μ΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ 잘 μ€€λΉ„ν•˜κΈ° μœ„ν•΄μ„œ μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ λ§Œλ“€ 수 있게 ν•˜λŠ” λͺ‡λͺ‡ κ°„λ‹¨ν•œ 것듀이 μžˆμŠ΅λ‹ˆλ‹€.
- `from __future__ import`문을 톡해 보닀 ν˜„λŒ€μ μΈ κΈ°λŠ₯ 쀑 일뢀λ₯Ό ν™œμ„±ν™”ν•  수 있으면 μ˜ˆμƒλ˜λŠ” ν–₯ν›„ Python λ²„μ „μ˜ κΈ°λŠ₯을 쑰기에 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

<a id="s2.20.2-pros"></a>

#### 2.20.2 μž₯점

- Python 3λ₯Ό 염두해 두고 μž‘μ„±λœ μ½”λ“œλŠ” λͺ…ν™•ν•˜κ³  ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  μ˜μ‘΄μ„±μ΄ Python 3μ—μ„œ μ‹€ν–‰ν•˜κΈ°κ°€ 더 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.
- μ΄λŠ” ν˜Έν™˜μ„±μ„ μ„ μ–Έν•˜κ³  ν•΄λ‹Ή 파일 λ‚΄μ—μ„œ νšŒκ·€λ₯Ό λ°©μ§€ν•˜λ©΄μ„œ νŒŒμΌλ³„λ‘œ 변경이 μ΄λ£¨μ–΄μ§ˆ 수 μžˆμœΌλ―€λ‘œ λŸ°νƒ€μž„ 버전 μ—…κ·Έλ ˆμ΄λ“œλ₯Ό 더 μ›ν™œν•˜κ²Œ λ§Œλ“œλŠ” κ²ƒμœΌλ‘œ μž…μ€‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
- μ΅œμ‹  μ½”λ“œλŠ” ν–₯ν›„ λŸ°νƒ€μž„ μ—…κ·Έλ ˆμ΄λ“œ 쀑에 λ¬Έμ œκ°€ 될 수 μžˆλŠ” 기술적 뢀채가 좕적될 κ°€λŠ₯성이 적기 λ•Œλ¬Έμ— μœ μ§€ 관리가 더 μ‰½μŠ΅λ‹ˆλ‹€.

<a id="s2.20.3-cons"></a>

#### 2.20.3 단점

- μ–΄λ–€ μ‚¬λžŒλ“€μ€ μΆ”κ°€λœ boilerplateκ°€ μΆ”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κΈ°λŠ₯을 importν•˜λŠ” 것은 μ΄λ‘€μ μž…λ‹ˆλ‹€.
- μ΄λŸ¬ν•œ μ½”λ“œλŠ” ν•„μš”ν•œ feature 문을 λ„μž…ν•˜κΈ° μ „μ—λŠ” 맀우 였래된 인터프리터 λ²„μ „μ—μ„œ λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- 일반적으둜 λ‹€μ–‘ν•œ ν™˜κ²½μ„ μ§€μ›ν•΄μ•Όν•˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œ ν•„μš”ν•©λ‹ˆλ‹€.

<a id="s2.20.4-decision"></a>

#### 2.20.4 κ²°λ‘ 

##### from \_\_future\_\_ imports

- `from __future__ import` ν˜•νƒœλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 λ°”λžŒμ§ν•©λ‹ˆλ‹€. λͺ¨λ“  μƒˆλ‘œμš΄ μ½”λ“œλŠ” λ‹€μŒ 사항이 ν¬ν•¨λ˜μ–΄μ•Ό ν•˜λ©° κ°€λŠ₯ν•œ 경우 κΈ°μ‘΄ μ½”λ“œκ°€ ν˜Έν™˜λ˜λ„λ‘ μ—…λ°μ΄νŠΈ ν•΄μ•Ό ν•©λ‹ˆλ‹€
- `from __future__ import`문을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
- 주어진 μ†ŒμŠ€νŒŒμΌμ—μ„œ λ”μš± ν˜„λŒ€μ μΈ Python ꡬ문 κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- `__future__` import 뒀에 κΈ°λŠ₯이 숨겨져 μžˆλŠ” λ²„μ „μ—μ„œ 더 이상 μ‹€ν–‰ν•  ν•„μš”κ°€ μ—†λ‹€λ©΄ ν•΄λ‹Ή 쀄을 자유둭게 μ œκ±°ν•˜μ„Έμš”.
- 3.7 이상이 μ•„λ‹Œ 3.5 이전 λ²„μ „μ—μ„œ 싀행될 수 μžˆλŠ” μ½”λ“œμ—μ„œ κ°€μ Έμ˜¬ 경우

```python
from __future__ import generator_stop
```

- 2.7 버전을 계속 μ§€μ›ν•΄μ•Όν•˜λŠ” 뢀담이 μžˆλŠ” λ ˆκ±°μ‹œ μ½”λ“œμ˜ 경우

```python
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
```

- `import`에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [absolute imports](https://www.python.org/dev/peps/pep-0328/), [`/` division behavior](https://www.python.org/dev/peps/pep-0238/), [the `print` function](https://www.python.org/dev/peps/pep-3105/)을 μ°Έμ‘°ν•˜μ„Έμš”.
- μ΄λŸ¬ν•œ importλŠ” ν˜„μž¬ λͺ¨λ“ˆμ—μ„œ μ‚¬μš©λ˜μ§€ μ•Šλ”λΌλ„ μƒλž΅ν•˜κ±°λ‚˜ μ œκ±°ν•˜μ§€ λ§ˆμ„Έμš”. λͺ¨λ“  νŒŒμΌμ— 항상 ν–₯ν›„ importκ°€ μžˆμœΌλ―€λ‘œ λ‚˜μ€‘μ— μ΄λŸ¬ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν•  λ•Œ νŽΈμ§‘ν•˜λŠ” λ™μ•ˆ μžŠμ§€ μ•Šλ„λ‘ ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
- λ‹€λ₯Έ `from __future__` import λͺ…세도 μžˆμœΌλ‹ˆ μ•Œλ§žκ²Œ μ‚¬μš©ν•˜μ„Έμš”. `unicode_literals`λŠ” 파이썬 2.7 λ‚΄ μ—¬λŸ¬ κ³³μ—μ„œ λ„μž…λ˜λŠ” 암묡적 κΈ°λ³Έ 코덱 λ³€ν™˜ κ²°κ³Ό λ•Œλ¬Έμ— λͺ…ν™•ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κΆŒκ³ μ‚¬ν•­μ— ν¬ν•¨μ‹œν‚€μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ½”λ“œλŠ” ν•„μš”μ— 따라 `b''`, `u''` λ°”μ΄νŠΈλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ‚¬μš©ν•˜κ³  μœ λ‹ˆμ½”λ“œ λ¬Έμžμ—΄ literalλ₯Ό μ‚¬μš©ν•˜λ©΄ 더 μ’‹μŠ΅λ‹ˆλ‹€.
- μžμ„Έν•œ λ‚΄μš©μ€ [Python future statement definitions](https://docs.python.org/3/library/__future__.html) λ¬Έμ„œλ₯Ό μ½μ–΄λ³΄μ„Έμš”.
- μ½”λ“œκ°€ μΆ©λΆ„νžˆ ν˜„λŒ€μ μΈ ν™˜κ²½μ—μ„œλ§Œ μ‚¬μš©λœλ‹€λŠ” 확신이 λ“€ λ•ŒκΉŒμ§€ μ΄λŸ¬ν•œ importλ₯Ό μ œκ±°ν•˜μ§€ λ§ˆμ„Έμš”.
- ν˜„μž¬ μ½”λ“œμ—μ„œ νŠΉμ • ν–₯ν›„ importλ₯Ό 톡해 ν™œμ„±ν™”λ˜λŠ” κΈ°λŠ₯을 ν˜„μž¬ μ‚¬μš©ν•˜μ§€ μ•Šλ”λΌλ„ νŒŒμΌμ— ν•΄λ‹Ή κΈ°λŠ₯을 μœ μ§€ν•˜λ©΄ λ‚˜μ€‘μ— μ½”λ“œκ°€ 이전 λ™μž‘μ— 따라 μ‹€μˆ˜λ‘œ μˆ˜μ •λ˜λŠ” 것을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.
- μ μ ˆν•˜λ‹€κ³  μƒκ°λ˜λŠ” λ‹€λ₯Έ `from __future__` import 문을 μ‚¬μš©ν•˜μ„Έμš”.
- 2.7버전 내에 μ—¬λŸ¬ μœ„μΉ˜μ—μ„œ λ„μž…λœ μ•”μ‹œμ  κΈ°λ³Έ 코덱 λ³€ν™˜ 결과둜 인해 ν™•μ‹€ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 2.7버전에 λŒ€ν•œ ꢌμž₯ 사항에 `unicode_literals`λ₯Ό ν¬ν•¨ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
- λŒ€λΆ€λΆ„μ˜ 이쀑 버전 2-3 μ½”λ“œλŠ” ν•„μš”ν•œ 경우 `b''` 와 `u''` qλ°”νŠΈμ™€ μœ λ‹ˆμ½”λ“œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ„ λͺ…μ‹œμ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이 더 λ‚˜μ•˜μŠ΅λ‹ˆλ‹€.

##### six, future 그리고 past 라이브러리

- ν”„λ‘œμ νŠΈκ°€ Python 2, 3 λͺ¨λ‘ μ§€μ›ν•΄μ•Όν•˜λŠ” κ²½μš°μ— 라이브러리λ₯Ό μ ν•©ν•˜κ²Œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. μ½”λ“œλ₯Ό 더 κΉ¨λ—ν•˜κ³  삢을 더 μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.
- ν”„λ‘œμ νŠΈκ°€ μ—¬μ „νžˆ Python 2, 3 λͺ¨λ‘μ—μ„œ μ‚¬μš©μ„ μ§€μ›ν•΄μ•Όν•˜λŠ” 경우 μ ν•©ν•˜λ‹€κ³  νŒλ‹¨λ˜λŠ” λŒ€λ‘œ [six](https://pypi.org/project/six/), [future](https://pypi.org/project/future/), 및 [past](https://pypi.org/project/past/) 라이브러리λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.
- μ½”λ“œλ₯Ό 더 κΉ¨λ—ν•˜κ³  삢을 더 μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
FLAGS = flags.FLAGS
```

- λΆ€μ μ ˆν•œ 예 (이 νŒŒμΌμ€ `doctor/who/` 에 μžˆλ‹€κ³  κ°€μ •ν•˜κ³  `jodie.py`λ˜ν•œ μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.)
- λΆ€μ μ ˆν•œ 예 _(이 νŒŒμΌμ€ `doctor/who/` 에 μžˆλ‹€κ³  κ°€μ •ν•˜κ³  `jodie.py`λ˜ν•œ μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.)_

```python
# Unclear what module the author wanted and what will be imported. The actual
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@

- λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ νŒ¨ν‚€μ§€λŠ” 고유의 μ˜ˆμ™Έκ°€ μ •μ˜λ˜μ–΄ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.
- μ‚¬μš©ν•˜λŠ” λ™μ•ˆ, 기쑴에 μ‘΄μž¬ν•˜λŠ” μ˜ˆμ™Έ 클래슀(exception class)λ‘œλΆ€ν„° 상속을 λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.
- μ˜ˆμ™Έ 이름은 `Error`둜 λλ‚˜μ•Ό ν•˜κ³  말더듬이(stutter)둜 μ‹œμž‘ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.(`foo.fooError`).
- μ˜ˆμ™Έ 이름은 `Error`둜 λλ‚˜μ•Ό ν•˜κ³  λ˜ν’€μ΄λ‘œ μ‹œμž‘ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.(`foo.fooError`).
- μ˜ˆμ™Έλ₯Ό λ‹€μ‹œ λ°œμƒμ‹œν‚€κ±°λ‚˜ μ“°λ ˆλ“œμ˜ κ°€μž₯ λ°”κΉ₯ μͺ½ 블둝에 μžˆμ§€μ•ŠμœΌλ©΄ μ ˆλŒ€ 포괄적인 `except:`문을 μ‚¬μš©ν•˜κ±°λ‚˜ `Exception`, `StandardError`을 μ‚¬μš©ν•˜μ§€λ§ˆμ„Έμš”. (그리고 μ—λŸ¬λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜μ„Έμš”.) Python은 이와 κ΄€λ ¨ν•΄μ„œ 맀우 κ΄€μš©μ μ΄λ©° `except:` λͺ¨λ“  μ˜€νƒˆμžλ₯Ό λΉ„λ‘―ν•˜μ—¬, sys.exit() 호좜, Ctrl+C둜 μΈν•œ μΈν„°λŸ½νŠΈ, μœ λ‹›ν…ŒμŠ€νŠΈ μ‹€νŒ¨μ™€ λ§ˆμ§€λ§‰μœΌλ‘œ 당신이 포착을 μ›ν•˜μ§€ μ•Šμ•˜λ˜ λ‹€λ₯Έ λͺ¨λ“  μ’…λ₯˜μ˜ μ˜ˆμ™Έλ“€κΉŒμ§€ λͺ¨λ‘ μž‘μ•„λ‚Ό κ²ƒμž…λ‹ˆλ‹€.
- μ½”λ“œμƒμ—μ„œ `try`/`except` λΈ”λ‘μ˜ 수λ₯Ό μ΅œμ†Œν™”μ‹œν‚€μ„Έμš”. `try`문의 λ‚΄λΆ€κ°€ 컀질수둝 μ˜ˆμ™ΈλŠ” 당신이 μ˜ˆμ™Έκ°€ λ°œμƒν• κ²ƒμ΄λΌ μ˜ˆμƒν•˜μ§€ μ•Šμ•˜λ˜ μ½”λ“œμ— μ˜ν•΄ 점점 더 λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μƒν™©μ—μ„œ, `try`/`except` 블둝은 μ§„μ§œ κ²€μΆœν•΄μ•Ό ν•  μ—λŸ¬λ₯Ό κ°€λ¦¬κ²Œ λ©λ‹ˆλ‹€.
- μ˜ˆμ™Έκ°€ `try` λΈ”λ‘μ—μ„œ λ°œμƒν•˜λ˜ μ•ˆν•˜λ˜ `finally`μ ˆμ€ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€. 이건 가끔 κΉ”λ”νžˆ ν•˜λŠ”λ° μœ μš©ν•©λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄, νŒŒμΌμ„ 닫을 λ•Œ κ°€ κ·Έ μ˜ˆμž…λ‹ˆλ‹€.
Loading

0 comments on commit fafedbc

Please sign in to comment.