인공지능/파이썬
타입 어노테이션
Ryuzy
2023. 9. 12. 01:52
728x90
반응형
1. 타입 어노테이션
파이썬의 타입 어노테이션(Type Annotation) 은 변수나 함수의 데이터 타입을 명시적으로 표시해주는 기능입니다. 파이썬은 기본적으로 동적 타이핑(dynamic typing) 언어이기 때문에 변수의 타입을 명시하지 않아도 됩니다. 하지만 코드의 가독성과 정적 분석 도구(myPy 등) 사용, IDE의 자동완성에 도움이 되기 때문에 타입 어노테이션을 사용하는 것이 좋습니다.
2. 변수 타입 어노테이션
실제로 name = 123 같은 다른 타입을 할당해도 파이썬이 에러를 내지는 않습니다. (런타임에는 영향을 주지 않음)
name = '김사과'
name: str = '김사과'
age = 10
age: int = 10
height = 160.5
height: float = 160.5
is_lover = True
is_lover: bool = True
자주 사용하는 타입
int | 정수 |
float | 실수 |
str | 문자열 |
bool | 불리언 |
list[int] | 정수의 리스트 |
dict[str, int] | 문자열을 키로, 정수를 값으로 가지는 딕셔너리 |
tuple[str, int] | 문자열과 정수로 구성된 튜플 |
Optional[int] | int 또는 None 일 수 있음 |
Any | 아무 타입이나 가능 |
3. 리스트, 튜플, 딕셔너리, 세트
names = ['김사과', '오렌지', '반하나']
names: list[str] = ['김사과', '오렌지', '반하나']
print(names)
values: list[int | str] = [1, "two", 3, "four"]
print(values)
age = (25, 20)
age: tuple[int, int] = (25, 20)
print(age)
numbers: tuple[int, ...] = (1, 2, 3, 4, 5)
print(numbers)
student_scores = {'김사과': 90.5, '오렌지': 88.3}
student_scores: dict[str, float] = {'김사과': 90.5, '오렌지': 88.3}
print(student_scores)
unique_numbers = {1, 2, 3, 3, 4}
unique_numbers: set[int] = {1, 2, 3, 3, 4}
print(unique_numbers)
4. 함수
def add(a, b):
return a + b
print(add(10, 3))
print(add('십', '삼'))
def add(a: int, b: int) -> int:
return a + b
print(add(10, 3))
print(add('십', '삼'))
# 타입 어노테이션을 확인
add.__annotations__
def greet(user: str | None) -> str:
return f"Hello, {user or 'Guest'}"
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)
def print_student(s: Student) -> None:
print(f'이름: {s.name}, 나이: {s.age} 🎃')
student = Student('김사과', 20)
print(student)
print_student(student)
6. 옵셔널
변수가 특정 타입이거나 None일 수 있는 경우 Optional을 사용합니다.
def Hello(name: str | None) -> str:
if name is None:
return "Hello, Guest!"
return f"Hello, {name}!"
print(greet("apple"))
print(greet(None))
def find_user(user_id: int) -> str | None:
if user_id == 1:
return "apple"
return None
result1 = find_user(1)
result2 = find_user(99)
users: dict[int, str] = {
1: "apple",
2: "banana"
}
def get_user(user_id: int) -> str | None:
return users.get(user_id)
7. Any
Any는 특정 타입을 지정할 수 없을 때 사용하는 타입 힌트용 특수 타입입니다.
from typing import Any
def process(data: Any) -> None:
print(data)
728x90
반응형