파이썬은 동적으로 입력되는(dynamically typed)언어입니다.
그래서 다음과 같은 코드도 동작이 됩니다.
name = '딥러닝 마스터'
name = 26
name = True
'name'변수는
1. 'string(문자열)'로 시작하여
2. 'number(숫자)'가 되고
3. 마지막엔 boolean이 됩니다.
이러한 코드는 동작이 될지는 몰라도 유저 장치에서 실행되는 도중에 발생하는 수많은 런타임 에러의 원이이 되기도 합니다.
def add(a, b, c):
return a + b + c
add(1, 2, 3)
=> 6
'a', 'b', 'c'를 취하고 'a+b+c'를 리턴하는 함수가 있습니다.
사람은 그 함수를 숫자로만 불러야 한다는 것을 알지만 파이썬은 그 사실을 알지 못합니다!!!
파이썬은 a, b, c의 타입이 무엇이어야 하는지 알지 못합니다. 그 때문에 무엇이든 통과할 수 있게 되어 문제가 발생합니다.
add(1, "2", 3)
그래서 누군가 위와같은 작은 실수를 하여 문자열 내부에 숫자 2를 전송하면 파이썬은 여전히 해당 코드를 실행하려고 시도할 것이고 '정수' 그리고 '문자열' 사이에 '+'를 사용할 수 없다는 오류로 끝날 것입니다.
이러한 일에 대해서 힌트나 경고를 파이썬 3.5버전부터 지원되는 type hints를 통해 얻을 수 있습니다.
apples = 30
apples: int = 30
위와 같이 ':'와 파이썬 유형을 이용하여 type hint를 추가할 수 있습니다.
그리고 'mypy'와 같은 type checker(유형 검사기)를 사용하여 검사가 가능합니다.
위와 같이 콘솔로 작동하는 것이 싫고 vs코드를 사용중이라면
VSCode 하단 바로 이동하여
'Type Checking'을 'On'으로 전환하면 됩니다!
(그러면 vs코드가 경고 표시를 할 것입니다.)
# 정수만 허용하도록 수정
def add(a: int, b: int, c: int):
return a + b + c
# 함수 반환 유형도 지정가능
def add(a: int, b: int, c: int) -> int:
return a + b + c
# list
str_type: list[str] = ['a', 'b', 'c']
str_type.append(1) <- 에러 밑줄
# dict
test: dict[str, float] = {
"a": 9.99,
"b": 12.98,
"c": 15.57,
}
menu["d"] = "10" <- 에러 밑줄 so, no float
# 함수 파라미터
from typing import Optional
def say_hello(name: Optional[str] = None):
return f"Hello ${name}!" if name else "Hello anon!"
say_hello() -> o
say_hello("sh") -> o
say_hello(123) -> x
# 숫자와 문자열 모두 포함하는 리스트
from typing import Union
prices: list[Union[str, int]] = [
1,
"2",
3,
"4",
5,
]
# 변수를 수정하지 않으려는 경우
from typing import Final
PRICE_PER_PERSON: Final = 999
PRICE_PER_PERSON = 1 <- 에러경고!
'파이썬 > 코딩 스타일 & 개념' 카테고리의 다른 글
파이썬 GIL 극복을 위한 방법 (0) | 2023.03.20 |
---|---|
멀티 스레드(Multi Thread) & 멀티 프로세스(Multi process) (0) | 2023.02.09 |
파이썬 언더스코어(_)에 대하여 (0) | 2023.01.26 |
[파이썬 스킬업 #1] PEP8 스타일 가이드 핵심 정리 (0) | 2023.01.05 |
댓글