변수 타입을 명시하지 않는 이유로 자유롭지만 혼란스러운 부분을 주석을 통해서 가이드 할 수 있다.
주석은 제약사항은 아니지만 3rd party 라이브러리에서 의미를 해석할 때 매우 유용하게 사용된다.
- PEP 3107에서 함수에 주석을 추가하는 구문을 소개한다.
- PEP 484에서는 PEP 3107의 데이터 타입에 대한 의미적인 부분을 소개한다.
본문은 핵심 요약을 통해서 함수 주석 사용에 도움이 되는 것을 목표로 한다.
PEP 3107 - Function Annotations
입력값 (Parameters) 리턴값(return values)을 옵션으로 명시 할 수 있다.Syntax:
def f(*args: <expression>, **kwargs: <expression>) -> <expression>:
<statements>
* 명시된 표현(<expression>)은 데이터 타입에 대한 주석이다.
컴파일 시, 주석된 표현은 계산된 결과로 재 표현된다.
def f(a: 'x', b: 5 + 6, c: list) -> max(2, 9):
pass
help(f)
Output:
Help on function f in module __main__:
f(a:'x', b:11, c:list) -> 9
PEP 484 - Type Hints
명시된 표현(<expression>)이 없는 것(None)은 type(None)과 같은 의미다.
타입은 별칭 사용이 가능하다.
typing 라이브러리를 통해서 다양한 타입을 정의 할 수 있다.
( Any, Union, Tuple, Callable, TypeVar, and Generic )
복합 예제는 다음과 같다.
from typing import TypeVar, Generic
T = TypeVar('T',int,float) # 'T'는 int or float type을 사용
def foo(x: T, y: T) -> T:
return x + y
help(foo)
Output:
Help on function foo in module __main__:
foo(x:typing.T, y:typing.T) -> typing.S
class zoo(Generic[T]): # Generic을 통해서 클래스에 포괄 적용
def foo(x: T, y: T) -> T:
return x + y
help(zoo)
Output:
Help on class zoo in module __main__:
class zoo(typing.Generic)
| Method resolution order:
| zoo
| typing.Generic
| builtins.object
|
| Methods defined hero:
|
| foo(x:typing.T, y:typing.T) -> typing.T
메모를 하듯이 주석을 하자.
주석할 수 없는 로직은 잔잔한 물결 앞에 모래성과 같다.
0 개의 댓글:
댓글 쓰기