Функция внутри функции неизвестное количество раз

#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