Порядок лямбда-функции Python - PullRequest
0 голосов
/ 15 ноября 2018

Если я сформулирую лямбда-функцию следующим образом:

someLambdaFunction = lambda x,y: x+x**2+y

Могу ли я изменить порядок лямбды, чтобы сказать

someOtherLambdaFunction = lambda y,x: x+x**2+y

без переписывания всей лямбда-функции? Просто переключите аргументы?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы можете написать общую функцию, которая заменяет первые два аргумента другой функции:

def swap2(func):
    """ Swap the first two arguments of a function """
    def wrapped(x, y, *args, **kwargs):
        return func(y, x, *args, **kwargs)

    return wrapped

f = lambda x,y: x+x**2+y
f_swapped= swap2(f)

assert f(3, 4) == f_swapped(4, 3)

Это работает, потому что функции - это просто обычные объекты Python, которые могут передаваться как целые числа, строки и т. Д..

Кстати, почти никогда нет причин писать something = lambda ....Вместо этого используйте def something(...).

0 голосов
/ 15 ноября 2018

Да, вы можете сделать что-то вроде этого:

someLambdaFunction = lambda x,y: x+x**2+y
someOtherLambdaFunction = lambda y, x: someLambdaFunction(x, y)

В основном, повторно использовать оригинал someLambdaFunction

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