Typy w Pythonie
Ten artykuł wyjaśnia typy w Pythonie.
YouTube Video
Typy w Pythonie
Moduł typing
w Pythonie służy do wprowadzania wskazówek dotyczących typów w Pythonie. Został pierwotnie wprowadzony w Pythonie 3.5 i ma na celu poprawę czytelności i utrzymania kodu. Wskazówki dotyczące typów nie wpływają na czas działania kodu, ale pozwalają na sprawdzanie typów za pomocą środowisk IDE i narzędzi do analizy statycznej.
Podstawy wskazówek dotyczących typów
Wskazówki dotyczące typów wyjaśniają zamierzenie kodu, jednoznacznie określając typy funkcji i zmiennych. W poniższym przykładzie określone są typy dla argumentów i wartości zwracanej.
1def add_numbers(a: int, b: int) -> int:
2 return a + b
3
4result: int = add_numbers(5, 10)
5print(result) # 15
W powyższym kodzie a
i b
są typu całkowitego (int
), a wartość zwracana przez funkcję jest również jednoznacznie określona jako typ całkowity. Nawet przy użyciu wskazówek dotyczących typów, typy nie są ściśle egzekwowane, ale podczas programowania mogą być wyświetlane ostrzeżenia przy niezgodnościach typów.
Kluczowe wskazówki dotyczące typów
Moduł typing
w Pythonie dostarcza różnych klas i funkcji do definiowania wskazówek dotyczących typów. Poniżej znajduje się lista najczęściej używanych wskazówek dotyczących typów.
int
: liczba całkowitastr
: ciąg znakówfloat
: liczba zmiennoprzecinkowabool
: wartość logicznaList
: listaDict
: słownikTuple
: krotkaSet
: zbiór
Typ List
Typ listy jest określany za pomocą klasy List
. Możesz także jawnie określić typ elementów w liście.
1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4 return sum(numbers)
5
6print(sum_list([1, 2, 3])) # 6
W tym przykładzie wszystkie elementy listy powinny być typu int
.
Typ Dict
Typ słownika jest definiowany za pomocą Dict
. Można określić typy kluczy i wartości.
1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4 return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice")) # 23
W tym przykładzie, słownik używa str
jako typu kluczy i int
jako typu wartości.
Typ Tuple
Krotki są określane za pomocą typu Tuple
. Możesz indywidualnie określić typ każdego elementu w krotce.
1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4 return "Alice", 30
5
6name, age = get_person()
7print(name, age) # Alice 30
Tutaj funkcja get_person
zwraca krotkę zawierającą ciąg znaków i liczbę całkowitą.
Typ Union
Typ Union
służy do wyraźnego wskazania, że akceptowanych jest wiele typów.
1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4 return value * 2.0
5
6print(process_value(10)) # 20.0
7print(process_value(3.5)) # 7.0
W tym przykładzie funkcja process_value
przyjmuje jako argument int
lub float
i zwraca wynik typu float
.
Typ Optional
Typ Optional
jest używany, gdy zmienna może być None
. Jest to skrótowa forma zapisu Union[Type, None]
.
1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4 if name is None:
5 return "Hello, Guest!"
6 return f"Hello, {name}!"
7
8print(greet()) # Hello, Guest!
9print(greet("Alice")) # Hello, Alice!
Tutaj pokazano, że gdy name
nie jest określone, traktowane jest jako None
.
Typy generyczne
Typy generyczne to sposób abstrakcyjnego reprezentowania typu elementów, jakie zawiera struktura danych. W module typing
można definiować typy generyczne przy użyciu TypeVar
.
1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6 return elements[0]
7
8print(get_first_element([1, 2, 3])) # 1
9print(get_first_element(["a", "b", "c"])) # a
W tym przykładzie funkcja get_first_element
zwraca pierwszy element listy i działa niezależnie od typu listy.
Alias typów
Alias typu to sposób na uproszczenie złożonych definicji typów przez nadanie im jasnej nazwy.
1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6 return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates()) # [(0, 0), (1, 1), (2, 2)]
W tym przykładzie alias typu Coordinates
jest zdefiniowany, aby reprezentować typ zawierający krotki wewnątrz listy.
Podsumowanie
Moduł typing
w Pythonie jest bardzo przydatny do poprawy czytelności i łatwości utrzymania kodu. Poprawne wykorzystanie wskazówek typów może pomóc w zapobieganiu niezgodnościom typów i błędom, szczególnie w dużych projektach lub w pracy zespołowej. Typy są jedynie narzędziem wspierającym rozwój i nie wpływają na zachowanie w czasie wykonywania, dzięki czemu zachowują elastyczność kodu.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.