파이썬 타입 어노테이션 / 타입 힌트
파이썬 변수 타입
원래 파이썬은 동적 프로그래밍 언어로, 코드를 실행하면 타입을 추론한다. C++, Java와 같이 변수의 타입을 별도로 설정해주지 않아도 된다. 또한 파이썬의 타입은 고정되어 있지 않아서 개발자가 자유롭게 바꿀 수 있다.
>>> number = 1
>>> type(number)
<class 'int'>
>>> number = 1.0
>>> type(number)
<class 'float'>
>>> number = "1"
>>> type(number)
<class 'str'>
파이썬 타입 어노테이션(Type Annotation)은 타입에 대한 메타 정보를 제공하는 기능이다. 주석으로 사용되기 때문에 함수에 추가한 타입 어노테이션이 부정확한다고 해서 경고나 오류가 발생하지는 않는다.
사용하는 이유는?
코드 가독성 향상
- 어노테이션을 사용하면 변수, 함수 인자 및 반환 유형에 대한 정보를 제공하여 코드를 더 쉽게 이해할 수 있다.
협업 용이성
- 여러 팀원이 참여하는 프로젝트에서 어노테이션은 변수, 함수 인자 및 반환 유형에 대한 정보를 공유하여 협업을 용이하게 할 수 있다.
타입 오류
- 코드 작성 시에 타입 오류를 미리 방지하여 안정성을 높일 수 있다.
- 디버깅 중 타입 관련 오류를 만나면, 어노테이션은 예상 유형에 대한 추가 정보를 제공한다.
유지 보수성 향상
- 후속 개발자에게 추가 정보를 제공하여 코드의 유지 보수성을 향상시킬 수 있다.
- 코드 리팩토링을 할 때 함수의 인자나 반환값의 타입이 변경되어도 타입 어노테이션을 통해 코드의 안정성을 유지할 수 있다.
사용 방법
변수
변수 이름 뒤에 콜론(:)을 붙이고 타입 명시한다.
name: str = "Silvia"
age: int = 30
emails: list: ["Silvia@gmail.com", "Silvia@work.com"]
address: dict = {
"street": "A",
"city": "B",
"state": "SC",
"zip": "24567"
}
함수
인자 타입과 반환 타입에 추가 할 수 있다. 인자에 타입 어노테이션을 추가할 때는 변수와 동일하게 적용하며, 반환값에 대한 타입을 추가할 때는 화살표(->)를 사용한다.
def score(num: int) -> str:
return str(num)
def average(num1: int, num2: int, num3: int = 2) -> float:
return ( num1 + num2 ) / num3
def greet(name: str) -> None:
print ("Hi! " + str)
def repeat(message: str, times: int = 5) -> list:
return [message] * times
Typing 모듈
자료구조 내부 어노테이션을 추가할 때는 typing 모듈을 사용 할 수 있다.
List, Set, Dict, Tuple
from typing import List, Set, Dict, Tuple
nums: List[int] = [1]
unique_nums: Set[int] = {1, 2}
vision: Dict[str, float] = {'left': 1.0, 'right': 0.9}
Silvia: Tuple[int, str, List[float]] = (25, "Silvia", [1.0, 0.9])
Typing 모듈은 변수에 대한 여러가지 옵션 함수도 제공한다.
Union
여러개 타입이 허용될 수 있는 변수의 타입을 명시 할 때 사용한다.
def toString(num: Union[int, float]) -> str:
return str(num)
Optional
None이 허용되는 함수의 매개 변수에 대한 타입을 명시 할 때 사용한다.
def repeat(message: str, times: Optional[int] = None) -> list:
if times:
return [message] * times
else:
return [message]
사용자 정의 타입( Class)
사용자 클래스에 대한 어노테이션도 추가 할 수 있다.
class User:
...
def find_user(id: str) -> User:
...
타입 어노테이션 확인
__annotations__ 사용하면 작성한 타입 어노테이션을 확인 할 수 있다.
>>> class Student:
... name: str
... age: int
... score: dict
...
... def set_name(name: str):
... self.name = name
...
... def get_name() -> str:
... return self.name
...
>>> student = Student()
>>> student.__annotations__
{'name': <class 'str'>, 'age': <class 'int'>, 'score': <class 'dict'>}
>>> student.set_name.__annotations__
{'name': <class 'str'>}
>>> student.get_name.__annotations__
{'return': <class 'str'>}
<참고>
'# Language > Python' 카테고리의 다른 글
[Python] 파이썬 입력 함수 비교: input() VS sys.stdin.readline() (0) | 2023.07.25 |
---|---|
[Pyhon] 파이썬 vars() 함수: 객체 속성을 다루는 도구 (0) | 2023.07.24 |
[Python] 파이썬 에러 핸들링: Exceptions (0) | 2023.01.26 |
[Python] 파이썬 패키지(Package) 사용법 (0) | 2023.01.12 |