За кортежи с един елемент в Python се изисква запетая накрая

Бизнес

Tuples, които са неизменни (непроменяеми) последователни обекти в Python.

Трябва да се внимава, когато се генерират кортежи с един елемент или празни кортежи.

Тук са описани следните подробности.

  • Пъзел с 1 елемент
  • Кръглите скоби на кортежите могат да бъдат пропуснати.
  • Празен кортеж
  • Кортежи в аргументи на функции

Пъзел с 1 елемент

Ако се опитате да генерирате кортеж с един елемент и запишете само един обект в кръглите скоби (), кръглите скоби () ще бъдат пренебрегнати и обработени и няма да се считат за кортеж.

single_tuple_error = (0)

print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>

За да се генерира кортеж с един елемент, се изисква запетая накрая.

single_tuple = (0, )

print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>

Например, когато използвате оператора + за конкатенация на няколко кортежа, имайте предвид, че ако се опитате да добавите един елемент и забравите запетаята, ще получите грешка.

# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple

print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)

Кръглите скоби на кортежите могат да бъдат пропуснати.

Причината, поради която кортеж с един елемент се нуждае от запетая, е, че кортежът не е стойност, затворена в кръгли скоби (), а стойност, отделена със запетая.

Запетаята е тази, която създава кортежа, а не кръглите скоби.
Tuples — Built-in Types — Python 3.10.4 Documentation

Дори и да се пропуснат кръглите скоби (), той се обработва като кортеж.

t = 0, 1, 2

print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>

Имайте предвид, че ненужна запетая след обект се счита за кортеж.

t_ = 0,

print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>

Празен кортеж

Както беше споменато по-горе, кръглите скоби () могат да бъдат пропуснати при представяне на кортеж, но са задължителни при генериране на празен кортеж.

Само интервал или запетая ще доведат до 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

Празните кортежи могат да бъдат генерирани и от функцията tuple() без аргументи.

empty_tuple = tuple()

print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>

Кортежи в аргументи на функции

Кръглите скоби на кортежа () са задължителни дори когато има синтактична двусмисленост.

Аргументите на функциите се разделят със запетаи, но в този случай е необходимо изрично да се укаже дали функцията е кортеж или не чрез наличието или липсата на кръгли скоби ().

Без скоби () всяка стойност се предава към всеки аргумент; със скоби () всяка стойност се предава като кортеж към един аргумент.

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'>

Ако кортежът е маркиран със звездичка *, елементите на кортежа могат да бъдат разширени и предадени като аргументи.

example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>

За повече информация вижте следната статия.

Copied title and URL