В декораторе Python получаю ошибку превышения максимальной глубины рекурсии
Реализую две функции: декоратор print_dichotomy
, выводящий на печать результаты расчета из основной функции dichotomy_
, и ее саму.
Первоначально проблема возникла, когда декоратор не увидел список из основной функции eps_list
. Решил так, что название данной переменной прописал полностью: dichotomy_.eps_list
.
При этом сделал ряд преобразований в декораторе, но получаю ошибку:
RecursionError: maximum recursion depth exceeded
То есть у меня превышена максимальная глубина рекурсии.
Есть модуль, который глубину расширяет, но мне он не помог. Что не так в декораторе? Привожу упрощенный код:
import numpy as np
def print_dichotomy(funcs):
def wrapper(a,b, n, eps_func, eps_arg):
result = funcs(a,b, n, eps_func, eps_arg)
res = list(dichotomy_(a,b, n, eps_func, eps_arg))
func = ', '.join(map(lambda x: f'{f(x):.10f}', res))
print('Значения функции составляют:\n', func)
print('Точность расчета: ', dichotomy_.eps_list)
return wrapper
def f(x):
return 1.2-np.log(x)-4*np.cos(2*x)
@print_dichotomy
def dichotomy_(a, b, n, eps_func, eps_arg):
dichotomy_.eps_list = []
grid = np.linspace(a, b, n)
for x, y in zip(grid, grid[1:]):
mid = (y + x) / 2
root = mid
eps = (y-x) / 2
dichotomy_.eps_list.append(eps)
if root:
yield root
dichotomy_(0.0001, 50, 100, 0.000001, 0.000001)