#python #function
#питон #функция
Вопрос:
Как я могу использовать вывод одной функции в качестве аргумента другой. Существует неизвестное (X) количество функций, и каждая функция отличается. Аргумент первой функции известен (назовем его n).
Я попытался создать список функций и использовать результаты одной для другой, но ничего не могу сделать.
list = [function1, function2, function3, function4, function5.....functionX] def nestedfunction(list, n): a_1 = list[0](n) a_2 = list[1](a_1) a_3 = list[2](a_2) a_4 = list[3](a_3) a_5 = list[4](a_4) ...... a_x = list [len(list)-1](a_x-1) print (a_x)
Спасибо вам за вашу помощь.
Ответ №1:
Это намного проще, чем ты это сделал:
funcs = [function1, function2, function3, function4, function5.....functionX] def nestedfunction(funcs, n): for f in funcs: n = f(n) return n
Комментарии:
1. Это работает! Огромное спасибо! Я попытался изучить python сегодня (без предыдущего опыта программирования) специально для решения этой проблемы!
Ответ №2:
Повторите список и перезаписывайте n
его с каждой итерацией, затем верните его:
def nestedfunction(function_list, n): for function in function_list: n = function(n) return n
Ответ №3:
Другие ответы-это питонический способ сделать это. Но я просто хотел отметить, что это распространенный шаблон, и в функциональном программировании мы бы признали это сокращением. Итак, вот как мы будем проводить эту операцию:
gt;gt;gt; import functools gt;gt;gt; funcs = [lambda x: x 42, lambda x: x % 12, lambda x: x*2] gt;gt;gt; n = 0 gt;gt;gt; functools.reduce(lambda a, f: f(a), funcs, n) 12
Также обратите внимание, что мы можем использовать соответствующий инструмент из стандартной библиотеки, если хотим, чтобы каждый отдельный шаг выполнялся с помощью itertools
:
gt;gt;gt; import itertools gt;gt;gt; acc = itertools.accumulate(funcs, lambda a, f: f(a), initial=n) gt;gt;gt; for step in acc: ... print(step) ... 0 42 6 12