Tuples, čo sú nemenné (nemenné) sekvenčné objekty v jazyku Python.
Pri generovaní kôpok s jedným prvkom alebo prázdnych kôpok je potrebné postupovať opatrne.
Sú tu opísané tieto podrobnosti.
- Tuple s 1 prvkom
- Okrúhle zátvorky pre tuple je možné vynechať.
- Prázdny tuple
- Tuply v argumentoch funkcie
Tuple s 1 prvkom
Ak sa pokúsite vygenerovať tuple s jedným prvkom a do okrúhlych zátvoriek () zapíšete len jeden objekt, okrúhle zátvorky () sa budú ignorovať a nebudú spracované a nebudú považované za tuple.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Na vytvorenie tuplu s jedným prvkom je potrebná končiaca čiarka.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Napríklad pri použití operátora + na spájanie viacerých tuplov si uvedomte, že ak sa pokúsite pridať jeden prvok a zabudnete na čiarku, zobrazí sa chyba.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
Okrúhle zátvorky pre tuple je možné vynechať.
Dôvod, prečo tuple s jedným prvkom potrebuje čiarku, je ten, že tuple nie je hodnota uzavretá v okrúhlych zátvorkách (), ale hodnota oddelená čiarkou.
Čiarka vytvára tuple, nie okrúhle zátvorky.
Tuples — Built-in Types — Python 3.10.4 Documentation
Aj keď sa vynechajú okrúhle zátvorky (), spracuje sa ako tuple.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Všimnite si, že zbytočná čiarka za objektom sa považuje za tuple.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Prázdny tuple
Ako bolo uvedené vyššie, okrúhle zátvorky () možno pri reprezentácii tuplu vynechať, ale pri generovaní prázdneho tuplu sú povinné.
Samotná medzera alebo čiarka spôsobí chybu 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
Prázdne tuply možno generovať aj pomocou funkcie tuple() bez argumentov.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuply v argumentoch funkcie
Okrúhle zátvorky () sa vyžadujú aj v prípade syntaktickej nejednoznačnosti.
Argumenty funkcie sa oddeľujú čiarkami, ale v tomto prípade je potrebné explicitne označiť, či je funkcia tuple alebo nie, prítomnosťou alebo neprítomnosťou okrúhlych zátvoriek ().
Bez zátvoriek () sa každá hodnota odovzdáva každému argumentu; so zátvorkami () sa každá hodnota odovzdáva ako tuple jednému argumentu.
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'>
Ak je tuple označený hviezdičkou *, prvky tuple môžu byť expandované a odovzdané ako argumenty.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Viac informácií nájdete v nasledujúcom článku.