Python jest językiem typowanym dynamicznie, więc wartość zmiennych może się zmieniać podczas działania aplikacji. Jednak istnieją możliwości dodania „wskazówek” odnośnie typu danych. Czemu posiadanie takiej możliwości jest przydatne? Zaraz zobaczycie.
Przykład
Załóżmy, że mamy prostą funkcję która ma podnieść podaną liczbę do kwadratu:
def square(number):
return number ** 2
square(2)
Wynikiem działania tej funkcji będzie liczba 4 – super, to po co ta cała magia, jakieś typy, wskazówki, na co to komu?
Co nam daje typownie zmiennych?
W prostym przykładzie wydaje się to abstrakcyjnie, po co stosować takie rozwiązania w języku który z założenia ma być dynamicznie typowany? Rozwiązani tej zagadki jest proste – im większa skala projektu, tym więcej potrzeba „narzędzi” które pozwolą nam dany kod rozwijać, utrzymywać i testować. Dlatego zobaczmy na tym prostym przykładzie jak będzie wyglądać wersja z type hints.
from typing import Union
from decimal import Decimal
Number = Union[int, float, Decimal]
def square(number: Number) -> Number:
return number ** 2
square(2)
Jak widać – kodu jest trochę więcej, dzięki czemu wiemy, że podana wartość powinna być liczbą (zdeklarowaliśmy typ danych Number który może być liczbą całkowitą, zmiennoprzecinkową lub decimal’em). Dane wejściowe jak i wyjściowe są tego samego typu, więc wiemy do należy podać i czego należy oczekiwać w odpowiedzi – jest dobrze, prawie… 😉 Możemy sobie uruchomić ten kod, on zadziała, nawet jeśli podany jako parametr string (oczywiście, program wyrzuci błąd).
Potrzebujemy kolejnych narzędzi!
Z pomocą przychodzą nam Edytory/IDE czy wtyczki wspierające kontrolę typów takie jak mypy, pytype czy pylance. Jeśli korzystamy np. z narzędzia PyCharm czy Visual Studio Code, dostaniemy sugestię/informację o tym jakiego typu dane możemy przekazać do funkcji i jakiego typu dostaniemy zwrotkę. Możemy również ręcznie (z linii komend) uruchomić sprawdzenie typu. Wtedy dostaniemy informację o tym, czy wszystko jest ok czy jednak nie.

Photo by Courtney Corlew on Unsplash
