Search

Type Anotation

대분류
언어
소분류
Python
유형
타입추론
변수/함수/특수 타입 어노테이션
최종 편집 일시
2024/10/27 15:35
생성 일시
2024/07/09 00:12
15 more properties

Python의 타입 추론

Python은 동적(Dynamic) 프로그래밍 언어
인터프리터(Interpreter)가 코드를 실행하여 타입 추론
변수의 타입(Type)은 가변성을 띄고 있다.

타입 어노테이션(TypeScript)

파이썬에서 타입의 유연함은 소규모 프로젝트의 애플리케이션을 빠르게 개발할 때 용이
but 프로젝트의 규모가 커질 경우 유연함은 버그로 이어질 확률이 높아짐.
중규모 이상일 때는 타입 어노테이션/힌트를 이용하여 파이썬 코드의 타입 표시를 표준화함.

변수 타입 어노테이션 ( : )

name: str = "John Doe" age: int = 25 # 파이썬 3.8 이하 emails: list = ["john1@doe.com", "john2@doe.com"] # 파이썬 3.9 이상 emails: list[str] = ["john1@doe.com", "john2@doe.com"] # 파이썬 3.8 이하 address: dict = { "street": "54560 Daugherty Brooks Suite 581", "city": "Stokesmouth", "state": "NM", "zip": "80556" } # 파이썬 3.9 이상 address: dict[str, str] = { "street": "54560 Daugherty Brooks Suite 581", "city": "Stokesmouth", "state": "NM", "zip": "80556" }
Python
복사

함수 타입 어노테이션 ( -> )

def stringify(num: int) -> str: return str(num) def plus(num1: int, num2: float = 3.5) -> float: return num1 + num2 def greet(name: str) -> None: print("Hi! " + name) # 파이썬 3.8 이하 def repeat(message: str, times: int = 2) -> list: return [message] * times # 파이썬 3.9 이상 def repeat(message: str, times: int = 2) -> list[str]: return [message] * times
Python
복사

특수 타입 어노테이션/힌트

Final

최종 사항이라고 생각하면 됨. 번복 불가능.
재할당이 불가능한 변수
즉, 상수에 대한 타입 어노테이션을 추가할 때 사용
from typing import Final TIME_OUT: Final[int] = 10 type(TIME_OUT), TIME_OUT
Python
복사

Union

연합, 다중 선택 가능 사항
여러 개의 타입이 허용될 수 있는 상황에서 사용
python 3.9 이하 버전
from typing import Union def toString(num: Union[int, float]) -> str: return str(num)
Python
복사
python 3.10에서는 | 연산자로 typing 모듈의 Union을 대체할 수 있게 됨
def toString(num: int | float) -> str: return str(num)
Python
복사

Optional (옵션 사항)

차 뽑을 때 옵션 추가 이런 거랑 비슷하다고 생각하면 됨.
typing 모듈의 Optional은 None이 허용되는 함수의 매개변수에 대한 타입을 명시할 때 사용
Optional[int] === Union[int, None]과 동일
from typing import Optional def repeat(message: str, times: Optional[int] = None) -> list[str]: if times: return [message] * times else: return [message] repeat("hi", 3) repeat("good") # 둘다 가능
Python
복사

Callable

파이썬에서 함수를 일반값처럼 변수에 저장하거나 함수의 인자로 넘기거나 함수의 반환값으로 사용 가능. → 해당 함수에 대한 타입 어노테이션 기능
typing 모듈 소속
첫 번째 매개변수[[입력값…], 반환값]
from typing import Callable def repeat(greet: Callable[[str], str], name: str, times: int = 1) -> None: for _ in range(times): print(greet(name)) # 첫 번째 매개 변수에 타입 어노테이션(Callable[[str],str]를 추가하여, # str 타입의 인자를 하나 받고, 결과값을 str로 반환해줌. repeat(lambda name: f"Hi, {name}!", "Python", 2) def add(a: int, b: int) -> int: return a + b def foo(func: Callable[[int, int], int]) -> int: return func(2, 3)
Python
복사

Iterable

어떤 함수의 매개 변수에 타입 표시를 해줄 때 추상적으로 명시해주는 것이 유리
list, tuple, set 등 처리 가능
from typing import Iterable, List def toStrings(nums: Iterable[int]) -> List[str]: return [str(x) for x in nums] toStrings([1,2,3]) # list toStrings((1,2,3)) # tuple toStrings({1,2,3}) # set
Python
복사