*
(звездочка) перед именем кортежа при вызове функции. Например: func(*my_tuple)
.
Если передать кортеж как аргумент в функцию Python, возможны два основных сценария, в зависимости от того, как функция определена:
В этом случае кортеж будет передан как один неделимый объект. Функция получит этот кортеж как свой единственный аргумент, и сможет обращаться к его элементам через индексы (например, arg[0]
, arg[1]
и т.д.).
def my_function(my_tuple):
print(f"Кортеж: {my_tuple}")
print(f"Первый элемент: {my_tuple[0]}")
my_tuple = (1, 2, "hello")
my_function(my_tuple) # Выведет кортеж и его первый элемент
*
:
В этом случае элементы кортежа будут распакованы и переданы как отдельные аргументы в функцию. Количество элементов в кортеже должно соответствовать количеству ожидаемых аргументов (либо в функции должно быть предусмотрено использование *args
для приема переменного числа аргументов). Если количество аргументов не соответствует, возникнет ошибка TypeError
.
def my_function(a, b, c):
print(f"a: {a}, b: {b}, c: {c}")
my_tuple = (1, 2, "hello")
my_function(*my_tuple) # Выведет a: 1, b: 2, c: hello
def my_flexible_function(*args):
print(f"Аргументы: {args}")
my_flexible_function(*my_tuple) # Выведет Аргументы: (1, 2, 'hello')
def my_function(a, b, c, d):
print(f"a: {a}, b: {b}, c: {c}, d: {d}")
my_tuple = (1, 2, "hello")
# my_function(*my_tuple) # Вызовет TypeError: my_function() missing 1 required positional argument: 'd'
Важно помнить об этих двух вариантах при работе с функциями и кортежами, чтобы избежать неожиданных ошибок и обеспечить корректную передачу данных.