Картэжы з адным элементам у 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'>

Пусты картэж

Як згадвалася вышэй, круглыя ​​дужкі () могуць быць апушчаны пры прадстаўленні картэжа, але неабходныя пры стварэнні пустога картэжа.

Толькі прабел або коска прывядзе да 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'>

Для атрымання дадатковай інфармацыі глядзіце наступны артыкул.