
Le tuple sono sequenze immutabili in Python. Fai attenzione quando crei una tupla con un elemento (tupla un elemento singolo) o una tupla vuota.
In questo articolo vengono descritti i seguenti contenuti.
- Tupla con un elemento
- Le parentesi della tupla sono come facoltative
- Tupla vuota
- Tuple negli argomenti di funzione
Tupla con un elemento
Quando si genera una tupla con un elemento (tupla un elemento singolo), se si scrive un solo oggetto tra parentesi (), le parentesi () vengono ignorate e non trattate come una tupla.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Per generare una tupla con un elemento, è necessaria una virgola alla fine.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Ad esempio, quando si collega più tuple con l’operatore +, si noti che viene generato un errore se si tenta di aggiungere un elemento e si dimentica una virgola ,.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
Le parentesi della tupla sono come facoltative
Il motivo per cui hai bisogno di una virgola , per una tupla con un elemento è che “la tupla è un oggetto delimitato da virgola”, non “un oggetto racchiuso tra parentesi ()”.
Nota che in realtà è la virgola a formare una tupla, non le parentesi. Le parentesi sono facoltative, tranne nel caso della tupla vuota, o quando sono necessarie per evitare ambiguità sintattiche.
Tipi incorporati – Tuple — Documentazione Python 3.7.4
È una tupla anche se le parentesi () sono omesse.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Nota che se c’è una virgola non necessaria, dopo l’oggetto, verrà trattato come una tupla.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Tupla vuota
Come accennato in precedenza, le parentesi () possono essere omesse per rappresentare una tupla necessaria, ma sono quando si crea una tupla vuota.
SyntaxError viene sollevato se è presente solo uno spazio o una virgola ,.
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
# empty_tuple_error =
# SyntaxError: invalid syntax
# empty_tuple_error = ,
# SyntaxError: invalid syntax
# empty_tuple_error = (,)
# SyntaxError: invalid syntax
Una tupla vuota può anche essere creata con tuple() senza un argomento.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuple negli argomenti di funzione
Se c’è un’ambiguità sintattica, le tuple chiedere parentesi ().
Più argomenti vengono specificati separandoli con una virgola ,. Se vuoi specificare una tupla come un argomento, sono richieste parentesi ().
Senza parentesi (), ogni valore viene passato a ogni argomento e con parentesi (), una tupla viene passata a un argomento.
def example(a, b):
print(a, type(a))
print(b, type(b))
example(0, 1)
# 0 <class 'int'>
# 1 <class 'int'>
# example((0, 1))
# TypeError: example() missing 1 required positional argument: 'b'
example((0, 1), 2)
# (0, 1) <class 'tuple'>
# 2 <class 'int'>
Se aggiungi * alla tupla, puoi decomprimere la tupla e passare ogni elemento a ciascun argomento.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Vedere il seguente articolo per i dettagli.
