저는 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.Dict
과 dict
, 아니오 사용에는 실제 차이가 없습니다.
그러나 typing.Dict
A는 일반 유형 * 당신은 키와 값의 유형을 지정할 수 도 좀 더 유연하게는 :
def change_bandwidths(new_bandwidths: typing.Dict[str, str],
user_id: int,
user_name: str) -> bool:
따라서, 그것은 당신의 프로젝트 일생에 어떤 시점에서 당신이 확대되는 시점에서, 좀 더 정확하게 사전 인수를 정의하도록 수 typing.Dict
에 typing.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.Any
Python의 모든 객체가 인쇄 가능하기 때문에을 사용하면 코드가 계속 작동합니다 .
* : 참고 : 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]