본문 바로가기

컴퓨터/파이썬 공부정리

[Python] 'type hint'가 안될 때

 

https://skeo131.tistory.com/45

 

5. Palindrome

import collections def isPalindrome(s: str) -> bool: # 자료형 데크로 선언 strs: Deque = collections.deque() for char in s: if char.isalnum(): strs.append(char.lower()) # 팰린드롬 여부 판별 while len..

skeo131.tistory.com

팰린드롬을 설명하는 코드에서 type hint에 대해 간략하게 설명했다.

그런데 다음과 같은 코드에서 파이썬을 컴파일할 때 오류가 발생했다.

 

def reorderLogFiles(logs: List[str]) -> List[str]:
    letters, digits = [], []
    for log in logs:
        if log.split()[1].isdigit():
 #이하생략
def reorderLogFiles(logs: List[str]) -> List[str]: NameError: name 'List' is not defined

과 같은 오류가 발생했는데 이러한 오류는 List[str]을 'List[str]'롸 같이 string literal로 변경해준다면 정상적으로 작동된다.

 

def reorderLogFiles(logs: 'List[str]') -> 'List[str]':
    letters, digits = [], []
    for log in logs:
        if log.split()[1].isdigit():
# 이하생략

>>> ['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 8 1 5 1', 'dig2 3 6']

이 내용은 밑에 글에서 참조하여 작성했다.

 

https://velog.io/@moreal/Future-of-python-type-hint

 

Future of python type-hint

나는 파이썬을 사용하여 프로그램을 작성할 때, 타입 힌트를 거의 대부분 적는 편이다. 타입 힌트를 사용하면 라이브러리를 제작하거나 협업할 때에 있어, 다른 개발자가 해당 함수 어떤 값을 ��

velog.io

 


2020.8.31 추가:

type hint는 string으로 쓸 필요 없이 다음과 같이 모듈을 추가함으로써 사용할 수 있다.

from typing import Any, Sequence

def func(a: Sequence, key: Any) -> int:
    for i in range(len(a)):
        if a[i] == key:
            print(f'리스트에 {key}이/가 존재한다.')
            break
    else:
        print(f'리스트에 {key}이/가 존재하지 않는다.')
     
    return
    
a = [1,2,3,4]
key = 3
func(a, key)
>>> 리스트에 3이/가 존재한다.

key = 10
func(a, key)
>>> 리스트에 10이/가 존재하지 않는다.

출처:

https://python.flowdas.com/library/typing.html

 

typing --- 형 힌트 지원 — 파이썬 설명서 주석판

typing --- 형 힌트 지원 소스 코드: Lib/typing.py 참고 파이썬 런타임은 함수와 변수 형 어노테이션을 강제하지 않습니다. 형 어노테이션은 형 검사기, IDE, 린터(linter) 등과 같은 제삼자 도구에서 사용

python.flowdas.com