typing.Tuple
i typing.List
są Generic types; Oznacza to można określić, co wpisać swoje zawartość musi być:
def f(points: Tuple[float, float]):
return map(do_stuff, points)
ten określa, że krotka przekazany musi zawierać dwa float
wartości. Nie można tego zrobić za pomocą wbudowanego typu tuple
.
typing.Tuple
jest tutaj szczególny, ponieważ pozwala określić określoną liczbę oczekiwanych elementów i typ każdej pozycji. Użyj elipsy, jeśli długość nie jest ustawiona, a typ powinien zostać powtórzony: Tuple[float, ...]
opisuje zmienną długość tuple
z float
s.
W przypadku typing.List
i innych typów sekwencji zazwyczaj określa się tylko typ dla wszystkich elementów; List[str]
to lista ciągów o dowolnym rozmiarze. Zauważ, że funkcje powinny przyjmować jako argumenty type.Sequence
, a typ typing.List
jest zwykle używany tylko w przypadku typów zwracanych; ogólnie rzecz biorąc większość funkcji wykonywałaby dowolną sekwencję i tylko iterowała, ale gdy zwrócisz list
, naprawdę powracasz do określonego, zmiennego typu sekwencji.
Powinieneś zawsze wybierać typy ogólne typing
, nawet jeśli obecnie nie ograniczasz zawartości. Łatwiej jest dodać to ograniczenie późniejszym typem, ponieważ wynikowa zmiana będzie mniejsza.
Pierwsza z nich wygląda dużo lepiej na podświetlaniu składni SO! –
Daj to przeczytać, zacząłem zadawać to samo pytanie, które miałeś, zanim to przeczytam. https://docs.python.org/3/library/typing.html – MooingRawr
[Tuple, używany przez listę typów elementów. na przykład Tuple \ [int, int, str \]] (https://www.python.org/dev/peps/pep-0484/#the-typing-module) – Kasramvd