будет лучше, если вы используете
from typing import Callable
def func(*args, **kwargs):
pass
def repeat(times: int, func: Callable, *args, **kwargs):
for __ in range(times):
value = func(*args, **kwargs)
return value
# usage: repear(4, func, ...)
, тогда вы можете сделать это другой формой, чтобы repeat
возвратил функцию:
def repeat(times: int, func: Callable) -> Callable:
# the function that you really have to have:
def inner(*args, **kwargs):
for __ in times:
value = func(*args, **kwargs)
return valur
# return the function that you really want
return inner
# usage: repeat(4, func)(...)
Хорошо, но теперь вы думаю, декоратор будет лучше:
def repeat(func: Callable) -> Callable:
# the function that you really have to have:
def inner(*args, **kwargs):
for __ in times:
value = func(*args, **kwargs)
return valur
# return the function that you really want
return inner
теперь вы можете использовать его как:
times = 4
@repeat
def func(*args, **kwargs):
pass
но это ужасно, как насчет того, чтобы сделать это сильной функцией? Хорошая идея.
def outer_repeat(times: int):
return repeat
теперь вы можете работать так:
@outer_repeat(times = 4)
def func(*args, **kwargs):
pass
, поэтому окончательное решение будет выглядеть так:
def out_repeat(times: int):
def repeat(func: Callable):
# the function that you want to have
@functools.wraps(func)
def inner(*args, **kwargs):
for __ in range(times):
value = func(*args, **kwargs)
return value
# return the function that you wanna
return inner
return repeat