Как вернуть новую функцию с аргументами задом наперед
Я хочу написать функцию на Python. Для данной функции верните новую функцию, которая запускает исходную функцию с аргументами в обратном направлении. Например, функция ввода func
является pow
, поэтому func(2, 3) = 8. Возвращенная новая функция будет делать pow(3,2) = 9.
Я нашел это решение в другом посте
def flip(func):
'Create a new function from the original with the arguments reversed'
@wraps(func)
def newfunc(*args):
return func(*args[::-1])
return newfunc
Есть ли способ сделать это без @wrap
? Количество аргументов неизвестно. и это может быть любой тип: int
, string
, Поэтому функция, которую я хочу, принимает только один аргумент, который является именем исходной функции.
reverse_args(f)
при вызове *args будет следовать:
reverse_args(func)(*args)
2 ответа
С lambda
?
def f(a,b):
return a**b
def transform(f):
return lambda *args : f(*args[::-1])
g=transform(f)
print(g(4,5))
печать 625
Если это ваше единственное сомнение: @wraps
декоратор не нужен. Он добавляет метаданные к функции-обертке, которую он помечает, чтобы она была более похожа на исходную функцию, которую оборачивает. Например, он перезаписывает оболочку (в этом случае newfunc
) __name__
атрибут, что делает его идентичным оригинальному, если напечатано или если его repr
виден.
Что меняет последовательность аргументов args[::-1]
часть, а *
оператор, который раздает аргументы обратно.