일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘 연습
- js
- es6
- react
- form
- MAC
- 장고
- java
- django widget
- django ORM
- 파이썬 알고리즘
- Git
- 알고리즘
- Baekjoon
- c++
- AWS
- javascript
- HTML
- 알고리즘 문제
- CSS
- API
- Algorithm
- PYTHON
- 파이썬
- 알고리즘 풀이
- DRF
- web
- 백준
- django rest framework
- Django
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[python] Type Hints, python에 타입을 지정한다? 본문
정적언어 VS 동적언어
Type Hints
에 대해서 알아보기 전에 우선 정적언어와 동적언어에 대한 이해가 필요합니다.
정적언어
- 컴파일 시 변수의 타입이 결정
- 변수 선언 시 자료형 지정
- C, Java 등의 언어가 해당
동적언어
- 런타임 시 변수의 타입이 결정
- 실행 도중 변수에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있음
- python, javascript 등의 언어가 해당
Type Hints란
python은 대표적인 동적언어입니다.
그렇기 때문에 변수를 선언할 때, 함수가 매개변수를 받을 때 모두 자료형을 지정하지 않습니다.
위에서 말한대로 런타임 시 결정되기 때문에 실행 도중에 예상하지 못한 타입이 들어와 Type Error 발생할 수 있죠.
Type Hints
는 이를 방지하고자 타입을 표시하는 역할을 합니다.
하지만 이름 그대로 힌트일 뿐이지 타입을 강제화 하지는 않습니다.
Type Hints 사용법
Type Hints
를 어떻게 사용하는지 간단한 예제를 통해 알아봅시다.
python 3.5에서는 함수의 파라미터와 반환값에 대한 Type Hints
가 추가되었습니다.
def greeting(name: str) -> str:
return 'Hello ' + name
런타임 중, __annotation__
을 통해 확인이 가능합니다.
print(greeting.__annotations__)
# {'name': <class 'str'>, 'return': <class 'str'>}
python 3.6에서는 변수에 대한 Type Hints
가 추가되었습니다.
greeting_message: str = "hello minsung"
단순히 str과 int 외에 Dict, List, Tuple도 가능합니다.
from typing import Dict, List, Tuple
animal_cnts: Dict[str, int] = {
"dog": 2,
"cat": 1
}
heights: List[int] = [181, 163, 179, 172]
friends: Tuple[str, int, float] = ("minsung", 26, 180.9)
마무리
python 공식문서에 보면 아래와 같은 문구가 있습니다.
Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention.
해석하자면 파이썬은 계속 동적 언어로 남을거고, Type Hints
는 필수가 되지 않을거라는 말이죠.
하지만 Type Hints
는 유용하게 쓰일 곳이 많습니다.
Django의 경우, swagger로 API 문서를 자동화할 때도 요긴하게 쓰이고, 코드의 질을 높이기 위한 좋은 방법이 될 수 있습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
[python] GIL, Global interpreter Lock은 무엇일까? (1) | 2020.09.01 |
---|---|
[python] Decimal vs Float, 고정소수점과 부동소수점 (3) | 2020.06.10 |
[python] 파이썬의 정렬, Tim Sort (2) | 2020.06.03 |
[python] 언패킹, *args, **kwargs (0) | 2019.10.28 |
[python] 장식자, 데코레이터(decorator) 를 알아보자 (8) | 2019.08.08 |
Comments