Tuples, dat zijn onveranderlijke sequentie-objecten in Python.
Voorzichtigheid is geboden bij het genereren van tuples met een enkel element of lege tuples.
De volgende details worden hier beschreven.
- Tupel met 1 element
- Tuple ronde haakjes kunnen worden weggelaten.
- Lege tupel
- Tupels in functieargumenten
Tupel met 1 element
Als je probeert een tuple met één element te genereren en slechts één object binnen de ronde haakjes () schrijft, zullen de ronde haakjes () worden genegeerd en verwerkt en niet als een tuple worden beschouwd.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Een komma achteraan is vereist om een tupel met één element te genereren.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Als je bijvoorbeeld de + operator gebruikt om meerdere tupels aan elkaar te plakken, merk dan op dat als je probeert één element toe te voegen en een komma vergeet, je een fout krijgt.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
Tuple ronde haakjes kunnen worden weggelaten.
De reden waarom een tuple met één element een komma nodig heeft, is dat een tuple geen waarde is die tussen ronde haken () staat, maar een waarde gescheiden door een komma.
Het is de komma die de tupel maakt, niet de ronde haakjes.
Tuples — Built-in Types — Python 3.10.4 Documentation
Zelfs als de ronde haakjes () worden weggelaten, wordt het verwerkt als een tupel.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Merk op dat een onnodige komma na een object wordt beschouwd als een tupel.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Lege tupel
Zoals hierboven vermeld, kunnen de ronde haakjes () worden weggelaten wanneer een tupel wordt voorgesteld, maar ze zijn verplicht wanneer een lege tupel wordt gegenereerd.
Een spatie of een komma alleen resulteert in een 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
Lege tuples kunnen ook worden gegenereerd door tuple() zonder argumenten.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tupels in functieargumenten
Tuple ronde haakjes () zijn vereist, zelfs als er een syntactische ambiguïteit is.
Functie-argumenten worden gescheiden door komma's, maar in dit geval moet expliciet worden aangegeven of de functie een tupel is of niet door de aan- of afwezigheid van ronde haakjes ().
Zonder haakjes (), wordt elke waarde aan elk argument doorgegeven; met haakjes (), wordt elke waarde als een tupel aan één argument doorgegeven.
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'>
Als de tuple gemarkeerd is met een asterisk *, kunnen de elementen van de tuple worden uitgebreid en doorgegeven als argumenten.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Voor meer informatie, zie het volgende artikel.