Tipi in Python

Questo articolo spiega i tipi in Python.

YouTube Video

Tipi in Python

Il modulo typing in Python viene utilizzato per introdurre suggerimenti di tipo in Python. È stato originariamente introdotto in Python 3.5 ed è utilizzato per migliorare la leggibilità e la manutenibilità del codice. I suggerimenti di tipo non influenzano il runtime del codice, ma consentono il controllo dei tipi con IDE e strumenti di analisi statica.

Nozioni di base sui suggerimenti di tipo

I suggerimenti di tipo chiariscono l'intento del codice specificando esplicitamente i tipi di funzioni e variabili. Nell'esempio seguente, i tipi sono specificati per gli argomenti e il valore restituito.

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

Nel codice sopra, a e b sono di tipo intero (int), e il valore restituito della funzione è dichiarato esplicitamente come un intero. Anche con i suggerimenti di tipo, i tipi non sono rigorosamente imposti, ma potrebbero essere visualizzati avvisi durante lo sviluppo in caso di incongruenze di tipo.

Suggerimenti di tipo principali

Il modulo typing in Python fornisce varie classi e funzioni per definire suggerimenti di tipo. Di seguito è riportato un elenco di suggerimenti di tipo comuni.

  • int: intero
  • str: stringa
  • float: numero a virgola mobile
  • bool: booleano
  • List: lista
  • Dict: dizionario
  • Tuple: tupla
  • Set: insieme

Tipo List

Il tipo lista è specificato utilizzando la classe List. Puoi anche specificare esplicitamente il tipo degli elementi all'interno di una lista.

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

In questo esempio, tutti gli elementi della lista devono essere di tipo int.

Tipo Dict

Un tipo dizionario è definito utilizzando Dict. È possibile specificare i tipi di chiavi e valori.

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

In questo esempio, il dizionario utilizza str come tipo di chiave e int come tipo di valore.

Tipo Tuple

Le tuple sono specificate utilizzando il tipo Tuple. Puoi specificare il tipo di ciascun elemento in una tupla individualmente.

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

Qui, la funzione get_person restituisce una tupla contenente una stringa e un intero.

Tipo Union

Il tipo Union è utilizzato per indicare esplicitamente che sono accettabili più tipi.

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

In questo esempio, la funzione process_value accetta come argomento un valore int o float e restituisce un risultato di tipo float.

Tipo Optional

Il tipo Optional è utilizzato quando una variabile potrebbe essere None. È fornito come abbreviazione per 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!

Qui, mostra che quando name non è specificato, è trattato come None.

Tipi Generici

I tipi generici sono un modo per rappresentare astrattamente quali tipi di elementi contiene una struttura dati. Nel modulo typing, puoi definire tipi generici utilizzando 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

In questo esempio, get_first_element è una funzione che restituisce il primo elemento di una lista e funziona indipendentemente dal tipo della lista.

Alias di Tipo

Un alias di tipo è un modo per semplificare definizioni di tipo complesse assegnando loro un nome chiaro.

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)]

In questo esempio, un alias di tipo Coordinates è definito per rappresentare un tipo con tuple all'interno di una lista.

Riepilogo

Il modulo typing in Python è molto utile per migliorare la leggibilità e la manutenibilità del codice. Utilizzando correttamente gli hint di tipo, puoi aiutare a prevenire incompatibilità di tipo ed errori, specialmente in progetti su larga scala o nello sviluppo in team. I tipi sono semplicemente uno strumento di supporto allo sviluppo e non influenzano il comportamento durante l'esecuzione, mantenendo così la flessibilità del codice.

Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.

YouTube Video