python — Вызов функции через кортеж
Есть функция def f(x,y,z=False). . Есть атрибут класса j, который кортеж и содержит в себе несколько элементов, один внутри вложенный. Например, j = ((f, (x,y)), (fb, (x,y))) . При вызове функции в коде следующим образом
for elem in myclass.j: elem[0](elem[1])
выдаёт ошибку TypeError: f() missing 1 required positional argument: ‘y’. По сути я вызвал f((x,y)). Не понимаю как сделать, чтобы заработало.
Отслеживать
задан 26 сен 2018 в 20:26
25 3 3 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ошибка сообщает, что вы передали недостаточно аргументов в функцию, делайте итерацию по двум элементам и точно укажите индексы для всех аргументов:
def f(x, y): return x+y for f, args in ((f, (1, 2)), (f, (3, 5))): print(f(args[0], args[1])) # 3 # 8
Также можете использовать распаковку — в python * . Ключевое преимущество, которое даёт * — это возможность распаковки последовательностей неизвестной длины. Допустим в вашей задачи функции принимают разные наборы аргументов:
def f(x, y): return x + y def fb(x, y, z): return x + y + z def fbt(a, b, c, x, y, z): return a + b + c + x + y + z j = ((f, (1, 2)), (fb, (1, 2, 3)), (fbt, (1, 2, 3, 4, 5, 6))) for func, args in j: print(func, args) print(func(*args)) # 1 2 # 3 # 1 2 3 # 6 # 1 2 3 4 5 6 # 21
Если аргументы не сформированы в кортеж, то можно использовать следующий синтаксис:
k = ((f, 1, 2), (fb, 1, 2, 3), (fbt, 1, 2, 3, 4, 5, 6)) for func, *args in k: print(func, *args) print(func(*args))
Кортеж как аргумент

Это конечно здорово, но вот я думаю: а что если у меня есть здоровый такой кортеж(допустим 500 элементов), и мне надо передать его в эту функцию, не буду же я переписывать их все вручную
Первая мысль была: «А че, *args это же кортеж, чего бы не скормить функции кортеж?»:
1 2 3 4
. numbers = (2, 3, 4, 5) print(powersum(2, numbers))
На что Python сказал: «Гуляй-вася, пиши по новой.»
В чем подвох, что я не так понял? И как теперь быть, переписывать функцию, вместо *args пусть принимает кортеж? И теперь у меня будет одна функция для *args, в другая для tuple?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Создать кортеж и распаковать кортеж в несколько переменных
Создать кортеж и распаковать кортеж в несколько переменных
Имеется кортеж из нескольких производных элементов , необходимо этот кортеж отсортировать
имеется кортеж из нескольких производных элементов , необходимо этот кортеж отсортировать,если хотя.
Заполните один кортеж десятью случайными целыми числами от 0 до 5 включительно. Также заполните второй кортеж числами от
Заполните один кортеж десятью случайными целыми числами от 0 до 5 включительно. Также заполните.

Как вывести кортеж целиком и как распаковать кортеж в переменные?
Как вывести кортеж целиком и как распаковать кортеж в переменные?

Функция, возвращает квадрат аргумента, если аргумент число; хвост списка, если аргумент список; иначе сам аргумент
Помогите, пожалуйста, с заданием: Написать функцию, которая возвращает квадрат аргумента, если.
Распаковка аргументов для передачи в функцию Python
Бывают ситуации, когда для функции, требующей отдельных позиционных аргументов, значения этих аргументов уже находятся в списке или кортеже, и для вызова функции должны быть распакованы.
Например, встроенная range() функция ожидает отдельные аргументы start и stop . Если они не доступны отдельно, то можно распаковать аргументы из списка list или кортежа tuple , вызвав функцию с переменной этого списка/кортежа, а впереди нее поставить символ одной звездочки * :
# обычный вызов с отдельными аргументами >>> list(range(3, 6)) # [3, 4, 5] >>> args = [3, 6] # вызов с аргументами, распакованными из списка >>> list(range(*args)) # [3, 4, 5]
Таким же образом, из словаря dict в функцию можно передать ключевые аргументы, только в этом случае, перед переменной словаря ставится два символов звездочки ** :
>>> def parrot(voltage, state='a stiff', action='voom'): . print("-- This parrot wouldn't", action, end=' ') . print("if you put", voltage, "volts through it.", end=' ') . print("E's", state, "!") . >>> d = "voltage": "four million", "state": "bleedin' demised", "action": "VOOM"> >>> parrot(**d) # -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demis
- символом * — распаковывают последовательности в качестве элементов которых одно значение (списки, кортежи, множества)
- два символа ** — распаковывают последовательности в качестве элементов которых имеется ключ и значение (словари)
Примеры распаковки списков и словарей с аргументами для функции:
date_inf = 'year': "2020", 'month': "12", 'day': "06"> f_name = " - - .txt".format(**date_inf) print(f_name) # 2020-12-06.txt fruits = ['lemon', 'orange', 'banana', 'tomato'] print(*fruits) # lemon orange banana tomato
Распаковку аргументов можно использовать несколько раз в функции:
date_info = 'year': "2020", 'month': "01", 'day': "01"> track_info = 'artist': "Beethoven", 'title': 'Symphony No 5'> filename = " - - - - .txt".format(**date_info, **track_info) print(filename) # 2020-01-01-Beethoven-Symphony No 5.txt
fruits = ['lemon', 'orange', 'banana', 'tomato'] first, second, *orher = fruits print(orher) # ['banana', 'tomato'] first, *orher = fruits print(orher) # ['orange', 'banana', 'tomato'] first, *middle, last = fruits print(middle) # ['orange', 'banana']
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Функции это объекты
- Функции могут иметь атрибуты
- Функции могут храниться в структурах данных
- Функции могут быть вложенными
- Передача функции в качестве аргумента другой функции
- Область видимости переменных функции
- Операторы global и nonlocal
- Параметры (аргументы) функции
- Ключевые аргументы в определении функции Python
- Значение аргумента по умолчанию в функциях Python
- Варианты передачи аргументов в функцию Python
- Переменные аргументов *args и **kwargs в функции Python
- Распаковка аргументов для передачи в функцию Python
- Как оцениваются аргументы при вызове функции?
- Строгие правила передачи аргументов в функцию Python
- Инструкция return
- Анонимные функции (lambda-выражения)
- Строки документации в функциях Python
- Рекурсия
- Замыкания в функциях Python
- Перегрузка функций
Программа Python для передачи кортежа в качестве аргументов функции
Кортежи — это важный тип данных в Python, который часто используется для хранения фиксированного набора элементов. В этой статье мы обсудим, как передать кортеж в качестве аргументов функции в Python. Мы рассмотрим синтаксис передачи аргументов кортежа и приведем примеры того, как это сделать.
Давайте сначала поймем основы, которые нам понадобятся, чтобы начать подходить к проблеме. Задача требует от нас передать кортеж в качестве аргумента функции, для этого нам нужно знать, что такое функция в Python, что такое аргументы функции и что такое кортежи в Python.
Что такое функция в Python?
Функция на любом языке программирования — это фрагмент кода, содержащий блок операторов, которые выполняют определенную функцию или задачу и могут потребоваться более одного раза во время выполнения. Это важно, поскольку они обеспечивают возможность повторного использования кода и помогают поддерживать код, менее подверженный ошибкам из-за уменьшения избыточности.
Функции в Python могут быть объявлены с использованием ключевого слова «def», весь код внутри функции должен иметь правильные отступы, чтобы компилятор знал правильное определение функции. Функцию в Python можно определить следующим образом:
def functionName(): statement 1 statement 2 # End of function
Функция обычно вызывается с использованием имени функции, за которым следуют круглые скобки. Ниже приведен пример вызова функции.
functionName()
Определенная выше функция — это простейшая форма функции, которая не принимает никаких входных данных и ничего не возвращает. Но Python предоставляет нам возможность делать и эти вещи.
Аргументы функции
Бывают случаи, когда нам нужна функция, которая принимает для обработки некоторую форму входных данных. Итак, как мы можем достичь этого? Мы можем сделать это, используя аргументы функции.
Аргумент функции — это входные данные, которые функция должна иметь при каждом вызове. Аргументы функции определяются в круговых скобках вызова функции. Например —
# Function definition def functionWithArgs(argument1, argument2): statement 1 statement 2 functionWithArgs(arg1, arg2) # function call
Мы не ограничены каким-либо типом данных или количеством аргументов, которые мы можем передать функции. Мы можем передавать любые встроенные типы данных, а также определяемые пользователем типы данных и экземпляры класса. Помимо передачи входных параметров, мы также можем возвращать значения.
Теперь мы знаем, что такое функция в Python и как мы можем использовать аргументы для передачи входных данных функции для дальнейшей обработки. Давайте теперь посмотрим, что такое кортеж.
Кортеж в Python
Кортеж в Python — это заранее определенный тип данных, который действует как контейнер и может хранить в себе различные типы разнородных данных. Следует отметить, что они неизменяемы, поэтому их нельзя изменить после создания. Все элементы кортежа хранятся в круглых скобках, разделенных запятой. Синтаксис определения кортежа приведен ниже.
A = (1, 2, 3)
Теперь у нас есть все основы, которые нам нужно знать для решения проблемы. Давайте теперь обсудим способы подхода к этому.
Передача статических кортежей в качестве аргументов
Как мы знаем, мы можем использовать аргументы для передачи входных данных в функцию. Чтобы передать кортеж, нам просто нужно указать объект кортежа в круглых скобках во время определения функции.
Обратите внимание, что нам просто нужно указать имя переменной, ее значением будет кортеж, который мы определяем во время вызова функции.
Алгоритм
Шаг 1. Определите функцию с переменной в качестве параметра.
Шаг 2. Внутри функции выведите значение, которое содержит переменная.
Шаг 3. Создайте значение функции с кортежем внутри круглых скобок.
Пример
def tupleArg(inputTuple): print("Tuple argument passed as input to the function is: ", inputTuple) tupleArg((1, 2, 3))
Выход
Tuple argument passed as input to the function is: (1, 2, 3)
Использование кортежей пользовательского ввода
В приведенной выше программе обсуждалось, как мы можем передать статический кортеж в качестве аргумента. Но во многих случаях эти кортежи носят динамический характер. Вот почему сейчас мы сосредоточимся на том, чтобы взять кортеж в качестве входных данных от пользователя и передать его в качестве аргумента функции.
Алгоритм
Шаг 1. Создайте переменную для хранения кортежа.
Шаг 2. Возьмите строку значений от пользователя в качестве входных данных.
Шаг 3. Разделите входную строку, сопоставьте каждый элемент с целым числом и преобразуйте весь объект карты в кортеж.
Шаг 4. Создайте функцию, которая принимает переменную в качестве параметра.
Шаг 5. Внутри функции распечатайте входной кортеж.
Шаг 6. Вызов функции с вводным пользователем кортежем в качестве аргумента.
Пример
A = tuple(map(int, input("Enter the elements of tuple : ").split())) def tupleArg(inputTuple): print("Tuple argument passed as input to the function is: ", inputTuple) tupleArg(A)
Выход
Enter the elements of tuple : 12 33 776 339 Tuple argument passed as input to the function is: (12, 33, 776, 339)
Заключение
В этой статье мы сосредоточились на трех различных способах передачи кортежа в качестве аргумента функции. Мы узнали, что такое функция в Python, что подразумевается под аргументом функции и как мы можем передавать как статические, так и динамические кортежи.
Все права защищены. © Linux-Console.net • 2019-2024