Jak używać wskazówek typu w Pythonie

Jak używać wskazówek typu w Pythonie
W tym artykule obejmie przewodnik dotyczący używania „wskazówek typu” w programach Python. Wskazówki są używane do wskazania typów obiektów w języku programowania. Ja również wyraźnie określają rodzaj wartości zwróconych przez funkcje i klasy. Ten mechanizm i styl kodowania są czasami nazywane „pisaniem statycznym” lub „sprawdzaniem typu” w terminologii programowania. Niektóre języki programowania egzekwować wskazówki typu i bez nich interpreter lub kompilator rzuca błędy.

Python to dynamicznie wpisany język, a wskazówki typu nie są obowiązkowe. Interpreter Python automatycznie identyfikuje typy obiektów podczas wykonywania kodu, a także pozwala obiektom dynamicznie zmieniać swoje typy w ciągu życia. Jednak w Pythonie 3 wprowadzono opcjonalne wskazówki typu.5, umożliwiając programistom korzystanie z wskazówek typu, jeśli chcą.

Zauważ, że w przeciwieństwie do innych języków programowania, sam interpreter Python nie egzekwuje opcjonalnych wskazówek, ponieważ uważa je tylko za wskazówki. Będziesz musiał użyć modułów stron trzecich lub wtyczek edytora tekstu, aby egzekwować ścisłe sprawdzanie typu w Python.

Dlaczego warto używać wskazówek typu?

Wskazówki typu wyraźnie określają typy obiektów i zmniejszają niejednoznaczność kodu. Znacznie ułatwiają wywnioskowanie logiki za instrukcjami kodowymi, zwłaszcza gdy wielu członków zespołu pracuje ta sama baza kodu. Są również przydatne, gdy bazy kodowe są dostępne po długich odstępach czasu, ponieważ wskazówki typu ułatwiają wnioskowanie o podstawowej logice. Wskazówki typu mogą znacznie ułatwić debugowanie kodu, gdy pojawiają się problemy i awarie. Jednak zwiększają gadatość w kodzie, a niektórzy programiści mogą się nie podobać, ponieważ wpływa na standardową składnię Pythona, która jest znacznie czystsza. Wykorzystanie wskazówek typowych w programach Python może być również osobistym wyborem opartym na stylu kodowania i wzorach. Jak wspomniano wcześniej, nawet przy użyciu wskazówek typu, interpreter Python ich nie egzekwuje i być może będziesz musiał zainstalować moduł stron trzeci.

Podstawowa składnia i użycie

Poniższy przykład pokazuje wskazówki typu używane dla obiektu typu „int” w Pythonie:

def Square (liczba: int) -> int:
Numer zwroty *
Drukuj (kwadrat (5))

Pierwsze stwierdzenie definiuje funkcję o nazwie „Square”. Wymaga obowiązkowego argumentu o nazwie „liczba” i oblicza jego kwadrat. Wskazówka typu dla argumentu liczbowego jest zdefiniowana jako symbol „Int” za pomocą „:” (dwukropek), podczas gdy podpowiedź typu dla typu powrotu jest ponownie zdefiniowana jako „int” za pomocą symbolu „->” (strzałka).

Bez wskazówek typu ta sama funkcja zostałaby zdefiniowana w następujący sposób:

def Square (liczba):
Numer zwroty *
Drukuj (kwadrat (5))

Otrzymasz następujące dane wyjściowe po uruchomieniu dwóch próbek kodu podanych powyżej:

25
25

Jeśli chcesz po prostu przypisać wskazówkę typu do zmiennej podczas jej deklaracji, użyj następującej składni:

var1: str = "string"
var2: int = 5
var3: float = 6.0

Możesz przypisać wskazówki typu do zmiennych przed „=” równym znakiem. Jak wyjaśniono powyżej, nazwy obiektów i wskazówki typu muszą być oddzielone symbolem „:” (okrężnicy).

Interpreter Python nie egzekwuje wskazówek typu. Więc jeśli zmienisz typ obiektów na dowolny inny losowy typ dostępny w Python, otrzymasz ten sam wynik, o ile sama logika nie rzuca błędu. Oto próbka kodu:

def Square (liczba: float) -> str:
Numer zwroty *
wynik = kwadrat (5)
Drukuj (wynik)
print (typ (wynik))

Tutaj argument liczby jest typu „pływak”. Funkcja „kwadratowa” zwraca teraz obiekt typu „str”. Jednak oba typy nie są egzekwowane, a otrzymasz „25” jako wyjście, a zwrócona wartość będzie typu „int”. Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

25

Za pomocą aliasów typu

Aby zdefiniować wskazówki typu dla złożonych obiektów zawierających wiele typów lub niestandardowych typów obiektów, możesz użyć aliasów typu. Poniższa próbka kodu pokazuje użycie aliasów typu:

INTEGERLIST = LISTA [INT]
def Square (liczby: IntegerList) -> IntegerList:
zwrócić [n * n dla n w liczbach]
wynik = kwadrat ([5, 6, 7])
Drukuj (wynik)

W pierwszym instrukcji definiuje się nowy pseudonim typu „IntegerList”, przypisując mu typ. Definicja typu może być prosta lub złożona zawierająca wiele typów. Następnie ten typ alias jest następnie używany w funkcji kwadratowej i jest przypisywany do głównego argumentu i wartości zwracania. Funkcja kwadratowa zwraca teraz kwadrat każdej liczby na liście. Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

[25, 36, 49]

Używając wskazówki typu „dowolne”

Typ „dowolny” można użyć do adnotacji zmiennych, argumentów i typów zwrotnych z dowolną wskazówką. Obiekty z wskazówką typu „dowolne” mogą być ciągiem, liczbą całkowitą, pływakiem lub dowolnym innym ważnym typem w Pythonie. Oto przykład:

od wpisywania importu dowolnego
var1: dowolny = "string"
var2: dowolny = 5
var3: dowolny = 6.0

Pierwsza instrukcja importuje typ „dowolny” z modułu „pisania”. Moduł pisania zapewnia obsługę wskazówek typu w programach Python i musisz zaimportować z niego określone typy, aby z nich korzystać. Następnie, zamiast używać str, int, float lub dowolnej innej wskazówki typu, „dowolne” służy do wskazania, że ​​zmienna może być dowolnego typu przez cały okres życia. Zauważ, że wskazówki typu nadal nie są egzekwowane w Python bez korzystania z biblioteki stron trzecich.

Korzystanie z modułu strony trzeciego do sprawdzenia wskazówek typu

MYPY jest jednym z najczęściej używanych modułów sprawdzania typów dostępnych dla Pythona. Możesz go użyć, aby znaleźć błędy związane z wskazówkami typu w programach Python. Możesz go zainstalować w Ubuntu i innych dystrybucjach Linux z menedżera pakietów PIP. Aby to zrobić, uruchom jedno z tych poleceń:

$ pip instaluj mypy
$ PIP3 instaluj myPY

Po zainstalowaniu MYPY w systemie Linux możesz sprawdzić ścisłe problemy z sprawdzaniem typu w programie Python, wykonując polecenie w następującym formacie:

Program $ MYPY.py

Zauważ, że MyPy to tylko narzędzie do sprawdzania ścisłego kontroli. Przeprowadzi raport z twojego programu Python i pokaże ci błędy sprawdzania typu. Jednak nadal będziesz mógł normalnie uruchamiać programy Python (z wskazówkami typu lub bez), a podczas wykonywania nie zostaną rzucone żadne błędy związane z wskazówkami związanymi z typem. Rozważ następującą próbkę kodu:

def Square (liczba: int) -> int:
Numer zwroty *
wynik = kwadrat (5)
Drukuj (wynik)

Ta próbka kodu jest identyczna z jednym z wyjaśnieonych powyżej przykładów. Zakładając, że znajduje się w „głównym.plik py ”, możesz sprawdzić wskazówki typu za pomocą MyPy, uruchamiając następujące polecenie:

$ Mypy Main.py

Po uruchomieniu powyższego polecenia należy uzyskać następujące dane wyjściowe:

Sukces: brak problemów w pliku źródłowym 1

Jeśli dostarczysz obiekt typu pływaka do wywołania funkcji kwadratowej w tym samym przykładzie powyżej, MyPy rzuci błąd.

def Square (liczba: int) -> int:
Numer zwroty *
wynik = kwadrat (5.0)
Drukuj (wynik)

Teraz, gdy uruchamiasz plik za pomocą „Mypy Main.Polecenie PY ”, otrzymasz błąd podobny do tego:

główny.PY: 26: Błąd: Argument 1 do „Square” ma niekompatybilny typ „float”; Oczekiwane „int”
Znaleziono 1 błąd w pliku 1 (zaznaczony 1 plik źródłowy)

To tylko raport o błędach, który pokaże wpisz błędy wskazówek. Jeśli wykonasz oba próbki kodów wymienione powyżej bez MyPy, otrzymasz następujące dane wyjściowe:

25
25.0

Obejmuje to najbardziej podstawowe i powszechne użycie składni wskazów typu w Pythonie. Więcej informacji na temat wskazówek typów, zaawansowanych używania i typów niestandardowych, patrz oficjalna dokumentacja Python dostępna tutaj.

Wniosek

Wskazówki typu w Pythonie zapewniają systematyczny sposób dołączania wskaźników typu do zmiennych, funkcji i klas. Chociaż sam Python nie egzekwuje wskazówek typu, możesz użyć modułów stron trzecich do sprawdzenia wskazówek typu i użycia ich jako podstawowej formy testów, aby potwierdzić zamierzone zachowanie obiektów Pythona w programie. Sposób, w jaki język programowania Python jest zaprojektowany, a jego podstawowa filozofia, ścisłe sprawdzanie typów wskazówek może nigdy nie zostać wdrożone w standardowej bibliotece Python.