Как вернуть новую функцию с аргументами задом наперед - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу написать функцию на Python.Для данной функции верните новую функцию, которая запускает исходную функцию с аргументами в обратном направлении.Например, функция ввода func равна pow, поэтому func (2, 3) = 8. Возвращенная новая функция будет делать pow (3,2) = 9.

Я нашел это решение в другом post

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 ]

0 голосов
/ 26 сентября 2018

с 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

0 голосов
/ 26 сентября 2018

Если это ваше единственное сомнение: декоратор @wraps не нужен.Что он делает, так это добавляет некоторые метаданные к функции-обертке, которую он помечает, чтобы она была более похожа на исходную функцию, которую оборачивает.Например, он перезаписывает атрибут обертки (в данном случае newfunc) __name__, делая его идентичным оригинальному, если он напечатан или если его repr видно.

Что меняет аргументпоследовательность - это часть args[::-1] и оператор *, который возвращает аргументы обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...