Tuple, che sono oggetti sequenza immutabili in Python.
Bisogna fare attenzione quando si generano tuple con un solo elemento o tuple vuote.
I seguenti dettagli sono descritti qui.
- Tupla con 1 elemento
- Le parentesi tonde della tupla possono essere omesse.
- Tupla vuota
- Tuple negli argomenti delle funzioni
Tupla con 1 elemento
Se cercate di generare una tupla con un elemento e scrivete solo un oggetto all'interno delle parentesi tonde (), le parentesi tonde () saranno ignorate e processate e non considerate una tupla.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Una virgola finale è necessaria per generare una tupla con un elemento.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Per esempio, quando si usa l'operatore + per concatenare più tuple, si noti che se si cerca di aggiungere un elemento e si dimentica una virgola, si otterrà un errore.
# 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 tonde della tupla possono essere omesse.
La ragione per cui una tupla con un elemento ha bisogno di una virgola è perché una tupla non è un valore racchiuso tra parentesi tonde () ma un valore separato da una virgola.
È la virgola che crea la tupla, non le parentesi tonde.
Tuples — Built-in Types — Python 3.10.4 Documentation
Anche se le parentesi tonde () sono omesse, viene elaborato come una tupla.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Notate che una virgola non necessaria dopo un oggetto è considerata una tupla.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Tupla vuota
Come detto sopra, le parentesi tonde () possono essere omesse quando si rappresenta una tupla, ma sono necessarie quando si genera una tupla vuota.
Uno spazio o una virgola da soli risulteranno in un SyntaxError.
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
Le tuple vuote possono anche essere generate da tuple() senza argomenti.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuple negli argomenti delle funzioni
Le parentesi tonde () sono necessarie anche quando c'è un'ambiguità sintattica.
Gli argomenti delle funzioni sono separati da virgole, ma in questo caso, è necessario indicare esplicitamente se la funzione è una tupla o no con la presenza o l'assenza di parentesi tonde ().
Senza parentesi (), ogni valore viene passato ad ogni argomento; con le parentesi (), ogni valore viene passato come tupla ad 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 la tupla è contrassegnata da un asterisco *, gli elementi della tupla possono essere espansi e passati come argomenti.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Per ulteriori informazioni, vedere il seguente articolo.