[python] Typing.Dict와 dict의 차이점은 무엇입니까?

저는 Python 3.5에서 유형 힌트를 사용하여 연습하고 있습니다. 내 동료 중 한 명이 다음을 사용합니다 typing.Dict.

import typing


def change_bandwidths(new_bandwidths: typing.Dict,
                      user_id: int,
                      user_name: str) -> bool:
    print(new_bandwidths, user_id, user_name)
    return False


def my_change_bandwidths(new_bandwidths: dict,
                         user_id: int,
                         user_name: str) ->bool:
    print(new_bandwidths, user_id, user_name)
    return True


def main():
    my_id, my_name = 23, "Tiras"
    simple_dict = {"Hello": "Moon"}
    change_bandwidths(simple_dict, my_id, my_name)
    new_dict = {"new": "energy source"}
    my_change_bandwidths(new_dict, my_id, my_name)

if __name__ == "__main__":
    main()

둘 다 잘 작동하며 차이가없는 것 같습니다.

typing모듈 문서를 읽었습니다 .

사이 typing.Dict또는 dict어느 나는이 프로그램에 사용해야합니까?



답변

일반 사용 typing.Dictdict, 아니오 사용에는 실제 차이가 없습니다.

그러나 typing.DictA는 일반 유형 * 당신은 키와 값의 유형을 지정할 수 좀 더 유연하게는 :

def change_bandwidths(new_bandwidths: typing.Dict[str, str],
                      user_id: int,
                      user_name: str) -> bool:

따라서, 그것은 당신의 프로젝트 일생에 어떤 시점에서 당신이 확대되는 시점에서, 좀 더 정확하게 사전 인수를 정의하도록 수 typing.Dicttyping.Dict[key_type, value_type]교체보다 ‘작은’변화이다 dict.

여기에 Mapping또는 MutableMapping유형 을 사용하여 더 일반적으로 만들 수 있습니다 . 함수가 매핑 을 변경할 필요가 없기 때문에 Mapping. A dict는 하나의 매핑이지만 매핑 인터페이스를 만족하는 다른 개체를 만들 수 있으며 함수는 다음과 같이 잘 작동 할 수 있습니다.

def change_bandwidths(new_bandwidths: typing.Mapping[str, str],
                      user_id: int,
                      user_name: str) -> bool:

지금 당신은 명확하게 코드가 실제로되지 않습니다이 기능의 다른 사용자 말하고있다 변경new_bandwidths 전달 매핑.

실제 구현은 단순히 인쇄 가능한 객체를 기대합니다. 그것은 테스트 구현 일 수 있지만 new_bandwidths: typing.AnyPython의 모든 객체가 인쇄 가능하기 때문에을 사용하면 코드가 계속 작동합니다 .


* : 참고 : Python 3.7 이상을 사용 dict하는 경우으로 모듈을 시작하면 일반 유형으로 사용할 수 있으며 from __future__ import annotations, Python 3.9부터 dict(기타 표준 컨테이너 포함) 는 그렇지 않아도 일반 유형으로 사용되는 것을 지원합니다. 지시문 .


답변

typing.Dict의 일반 버전입니다 dict.

class typing.Dict(dict, MutableMapping[KT, VT])

dict의 일반 버전입니다. 이 유형의 사용법은 다음과 같습니다.

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

여기에서 dict의 키 및 값 유형을 지정할 수 있습니다. Dict[str, int]


답변