Как вернуть новую функцию с аргументами задом наперед

Я хочу написать функцию на 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] часть, а * оператор, который раздает аргументы обратно.

Другие вопросы по тегам