2017-12-05 11 views
0

워드 프로세서은이 같은 일반적인 유형으로 사용되는 표시 : 또한, 물론, 입력 - 힌트에 word_list을보다 정확 것이다대괄호없이 Dict 및 List와 같은 일반 유형 힌트를 사용할 수 있습니까? <a href="https://docs.python.org/3/library/typing.html#typing.Dict" rel="nofollow noreferrer"><code>Dict</code></a>에

def get_position_in_index(word_list: Dict[str, int], word: str) -> int: 
    return word_list[word] 

dict 등 :

def get_position_in_index(word_list: dict, word: str) -> int: 
    return word_list[word] 

그러나 Dict을 키 유형과 값이 같은 dict을 나타내는 형식 힌트로 사용하는 것이 맞습니까?

def get_position_in_index(word_list: Dict, word: str) -> int: 
    return word_list[word] 

(그리고 마찬가지로이 ListSequence 같은 다른 일반적인 유형은 이런 식으로 베어 사용할 수 있습니까?)

답변

2

은 예, DictDict[Any, Any]의 별칭으로 간주됩니다. dictDict[Any, Any]의 별칭입니다.

내장형인지 사용자 정의형인지에 관계없이 모든 일반 유형의 경우입니다. 유형 매개 변수를 생략하면 기본값은 항상 Any입니다. 이것은이 Generics section of PEP 484에 지정된 (강조 추가)

또한 Any 모든 입력 변수에 대해 유효한 값이다. 다음 고려 :

def count_truthy(elements: List[Any]) -> int: 
    return sum(1 for elem in elements if element) 

이 일반 표기를 생략하고 바로 elements: List 말을하는 것과 같습니다. 등 explicit is better then implicit하고, - 고 말했다

, 나는 일반적인 권장 사항이 완전히 단지 Dict을 사용하는 대신 Dict[Any, Any]을 작성해야한다는 것입니다 생각합니다.

유일한 단점은 함수 유형 서명이 더 길다는 것입니다. 그러나 유형 별칭을 사용하여이 문제를 해결할 수 있습니다.

from typing import Dict, Any 

AnyDict = Dict[Any, Any] 
WordDict = Dict[str, int] 

# Equivalent to your first code sample 
def get_position_in_index_1(word_list: WordDict, word: str) -> int: 
    return word_list[word] 

# Equivalent to your second and third code samples 
def get_position_in_index_2(word_list: AnyDict, word: str) -> int: 
    return word_list[word]