Python 기초
파이썬 기초(20)- 변수 타입 어노테이션(annotation)
두설날
2024. 3. 20. 10:45
*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*
1. 변수 어노테이션
변수 타입 어노테이션은 변수의 예상 타입을 명시하는데 사용됩니다. 이는 주로 코드의 가독성을 높이고, 정적 타입 검사 도구(mypy같은)를 사용하여 타입 오류를 사전에 잡아내기 위한 목적으로 사용됩니다. 타입 어노테이션은 실제 변수의 타입을 강제하는 것이 아닌, 개발자가 변수가 어떤 타입을 가져야 할 것으로 예상하는지 명시하는 것입니다.
- 어떤 타입을 넣어야 할지 미리 명시함으로써 개발할 때 실수를 줄임
- 강제성이 아니라서, 명시를 잘못해도 에러나지 않음
- 어노테이션의 목적: 깔끔하게 가독성 높이는 것
2. 기본 자료형 어노테이션
어노테이션 기본 형태입니다. 주로 변수나 자룟값의 변수뒤에 :와 = 명시함으로써, 자료형을 메모합니다.
#어노테이션 기본
name='peter'
name : str = 'peter'
age= 15
age: int = 15
height=165.5
height: float=165.5
a=False
a: bool=False
print(name)
print(type(name))
3. 컬렉션 자료형 어노테이션
컬렉션 자료형으로 리스트, 튜플, 딕셔너리, 세트에 대한 어노테이션 표현방법은 기본형보다 복잡합니다. 이 자료형들은 typing 모듈에서 가져올 수 있습니다. 어노테이션을 표현할 때는 []를 사용합니다.
- typing 모듈: 원래 있는 시퀀스와 다른 것
- 컬렉션 자료형 어노테이션: [] 사용
#리스트 어노테이션
a=['one','two','three']
a: List[str]=['one','two','three']
#튜플 어노테이션
b=(1,2,3)
b:Tuple[int]=(1,2,3)
#딕셔너리 어노테이션
c={'one':1,'two':2,'three':3}
c:Dict[str,int]={'one':1,'two':2,'three':3}
#세트 어노테이션
d={1,2,3}
d:Set[int]={1,2,3}
print(a)
print(b)
print(c)
print(d)
4. 함수 어노테이션
사용자 함수를 만들 경우, 함수안에 있는 변수들을 어노테이션으로 정의할 수 있습니다.
- 함수 어노테이션 확인 방법: 함수.__annotations__
#함수 어노테이션
def add(a,b):
return a+b
#a,b int형 변환
def add(a: int, b:int)->int:
return a+b
add(7,5)
add('칠', '오')
#함수의 어노테이션 확인
add.__annotations__
5. 클래스 어노테이션
class Student:
def __init__(self, name:str, age:int):
self.name=name
self.age=age
def __str__(self)->str:
return '이름: ' + self.name + '나이' + str(self.age)
# print() 함수만 쓴다면 리턴값은 None으로 나오지만, 리턴값을 설정해 메모리
#값을 넣음으로써 오버라이딩 된 것
def a(s:Student) ->None:
print(f'이름:{s.name}, 나이:{s.age} 🍖')
student=Student('peter', 25) # class문->__init__->__str__ 오버라이딩
print(student)
a(student)
class문->__init__->__str__ 단계로 오버라이딩
6. 옵셔널
변수가 특정 타입이거나 변수의 메모리값이 None일 경우 Optional을 사용합니다.
- None이거나 값이 나오는걸 조절
#옵셔널 모듈 설치
from typing import Optional
#함수 지정
def find_score(name: str, scores: Dict[str,float])->Optional[float]:
return scores.get(name)
print(find_score('김사과', {'김사과': 80.5, '오렌지':40.8, '반하나':90.4}))