Кортежи з одним елементом у Python вимагають кінцевої коми

Бізнес

Кортежи, які є незмінними (незмінними) об’єктами послідовності в 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'>

Порожній кортеж

Як зазначалося вище, круглі дужки () можна опускати при представленні кортежу, але вони є обов’язковими при генерації порожнього кортежу.

Тільки пробіл або кома призведе до синтаксичної помилки.

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

Додаткову інформацію див. у наступній статті.