Python3 function definition | 형 힌트 지원 | typing

2022. 12. 14. 17:04Backup

https://docs.python.org/ko/3/library/typing.html?highlight=function%20return%20type

 

typing — Support for type hints

Source code: Lib/typing.py This module provides runtime support for type hints. The most fundamental support consists of the types Any, Union, Callable, TypeVar, and Generic. For a full specificati...

docs.python.org

 

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:

위의 코드샘플은 LeetCode 풀다가 접했다.

잉 뒤에 '-> 어쩌고 타입'은 뭐지? 

 

Python3의 문법을 공식문서에서 검색해봤다.

-> 는

함수 리턴값의 주석 역할을 한다. 린터 툴에서 사용할 것으로 보인다. 반환형 강제는 아닌 것같다. 한글 문서로 읽으니 더 어렵다. 쨌든 기대되는 반환형 이다. 

 

https://peps.python.org/pep-0484/

 

PEP 484 – Type Hints | peps.python.org

PEP 484 – Type Hints Author: Guido van Rossum , Jukka Lehtosalo , Łukasz Langa BDFL-Delegate: Mark Shannon Discussions-To: Python-Dev list Status: Final Type: Standards Track Topic: Typing Created: 29-Sep-2014 Python-Version: 3.5 Post-History: 16-Jan-20

peps.python.org

이것은 벌써 생성된지 8년 정도가 된 기능이다. 이거 지키지 않는다하여, 런타임에 오류 없다. 하지만, 사용자가 자발적으로 사용하는 검사기(린터 를 의미하는것 같습니다.)에 이것을 기입하면 편하다. 라고 문서에서는 설명했다. IDE extension과 사용했을때, 생산성이 많이 올라가겠네요. (ex mypy / pyright(ms운영 라이브러리))

 

pyright 사용법

(vscode settings.json에 "python.analysis.typeCheckingMode": "basic" 추가)

 

 

파이썬은 동적으로 타입이 지정되는 언어이기는 하지만, 위의 린터에서 사용할, 형 힌트지원에서 더 나아가 타입 지정하는것을 지원하기도 한다. 

 

from typing import TypeVar, Text

AnyStr = TypeVar('AnyStr', Text, bytes)

def concat(x: AnyStr, y: AnyStr) -> AnyStr:
    return x + y

이 경우에는, AnyStr이 아닐 수가 없을것. 

 

 

동적언어 가 가지는 장점으로 타입을 일일이 명시하지 않고, 특정 변수의 타입이 중간에 바뀌는 등. 코딩이 편하다.

(편하다. 라고만 말하기에는 좀 ㅎㅎ)

 

하지만 때문에 그로인해, 예상치 못한 에러를 맞닥뜨리게 되니 좋다고 볼수만은 없어, 요즘 동적언어에서 타입 명시 및 검사 하는 수요가 많고. TypeScript 같은 것이 대두되었다. 결국 언어가 다 비슷해지는 거 아닌가 싶다. 타입에서 조금더 유동적인 언어와 그렇지 않은언어 이정도로. 예전에는 조금더 극명하게 나뉘었다면. 

 

 

아래 글의 포스팅 저자가 말하길, 이전에 작성된 라이브러리들은 Typing이 잘 되어있지 않은 경우가 더러 있는데, 이를 handling하기 위한 방법으로 

 

pyright --createstub django

예를들어 django에 stub을 별도 생성하여 사용하겠다. 는 뜻. pyi 파일을 생성할 곳을 지정하여 타입을 명시해주는 방법을 추천하였다. 

오늘도 개발하다가 토끼굴 로 들어가버렸다. 

 

https://sjquant.tistory.com/68

https://sjquant.tistory.com/69