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łkowita
  • str: ciąg znaków
  • float: liczba zmiennoprzecinkowa
  • bool: wartość logiczna
  • List: lista
  • Dict: słownik
  • Tuple: krotka
  • Set: 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.

YouTube Video