techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
1

Передача разного количества параметров в зависимости от сигнатуры функции

10.10.2017, 06:45. Показов 2023. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как парадигмально верно написать функцию, которая будет принимать в качестве параметра другую функцию и ее возможные аргументы и вызывать ее с таким количеством аргументов, как та требует:
(Разумеется, не прибегая к изменению кода вызываемых функций...)

Python
1
2
3
4
5
6
7
8
9
10
11
def foo(a):
    print("foo", a)
 
def bar(a, b):
    print("bar", a, b)
 
def invoke(func, *args):
    ...
 
invoke(foo, 3, 4) #foo 3
invoke(bar, 3, 4) #bar 3 4
Добавлено через 10 минут
Сотворил вот нечто такое:

Python
1
2
3
    ins = inspect.getargspec(func)
    nargs = len(ins.args)
    return func(*args[:nargs])
Насколько оно оптимально, нельзя ли лучше, и как это расширить на именованные аргументы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2017, 06:45
Ответы с готовыми решениями:

Передача разного количества параметров в функцию
Добрый день Всем ! Скажите пожалуйста, есть функция которая вызывается несколько раз, но передаёт...

Передача разного количества параметров в шаблонную функцию
Здравствуйте! Подскажите, пожалуйста, что нужно изменить в даном коде, чтоб в строке 9 тоже...

Функции с передачей разного количества параметров
есть код: #include <iostream> using namespace std; void Char(int num, char a1, char a2, ...);...

Написать перегружаемые функции умножения разного количества параметров
Помогите пожалуйста с задачей ничего не понимаю: Написать перегружаемые функции умножения...

Как лучше организовать биндинг при зависимости от параметров разного типа
Есть TextBlock, его текст зависит от двух параметров разного типа: например, Enum и DateTime,...

4
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.10.2017, 07:21 2
Т.е. ты хочешь, чтобы можно было передать больше аргументов, чем ожидает функция, а затем во время выполнения взять только необходимые? Счастливой отладки. Не надо так.

Зачем это нужно и какая исходная задача?
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
11.10.2017, 09:15  [ТС] 3
Это нужно для того, чтобы приемная функция могла принимать меньше аргументов, чем ей передают.
Это для упрощения написания пользовательских колбэков. Пользователь может просто хеллоуворд захотеть протестировать. Незачем ему получение всех параметров колбэка прописывать.
0
Эксперт Python
4630 / 2050 / 361
Регистрация: 17.03.2012
Сообщений: 10,131
Записей в блоге: 6
11.10.2017, 10:05 4
Присоединяюсь к 0х10. Очень уж извращённая задача. Можно, конечно, но лучше не надо.
Если есть возможность поменять функции, напр, добавить значения параметров по умолчанию - надо сделать так.

Если передать функции меньше значений, чем она принимает - полученный результат логически тоже должен быть функцией - от остальных, непереданных параметров. Это называется частичное применение (partial application), для него в питоне есть готовое средство.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
11.10.2017, 10:30 5
После обсуждения в личке остановились на том, что должны подойти колбеки без параметров, а параметры замыкать через functools.partial, о чем было сказано чуть выше.
0
11.10.2017, 10:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2017, 10:30
Помогаю со студенческими работами здесь

Передача методу разного количества опций
Здравствуйте. Подскажите, как можно реализовать метод в классе таким образом, чтобы можно было...

Изменение параметров меню, в зависимости от количества потомков на js
Добрый день, не могу решить проблему. Мне нужно , чтобы параметры менялись у подменю, в зависимости...

Повторная передача переменного количества параметров
Вопрос относиться к СИ (Неплохо бы было создать ветку на форуме по СИ) Как можно повторно...

Передача большого количества параметров в процедуру
Привет, на собеседовании в тесте попался такой вопрос (точно уже не помню, но попробую передать...

Передача большого количества параметров в конструктор класса
При инициализации класса необходимо передать по значению 7 массивов разных типов в конструктор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru