Есть ли способ, чтобы лямбда-ссылка внутри функции всегда возвращала противоположное значение bool? - PullRequest
0 голосов
/ 30 апреля 2020

Если у меня есть функция, которая принимает лямбда-ссылку в качестве параметра и возвращает эту ссылку, то при вызове она возвращает значение этой лямбда-функции (булево).

Есть ли способ заставить его вернуть противоположное логическое значение?

def returns_diff(lambda_function):
    return lambda_function
f = returns_diff(lambda x : x > 2)
f(0) 
# I know I can do it this way but I want to do it inside the function.
# print(not(f(0)))

---> Должен вернуть True, потому что он должен возвращать False, поскольку 0 не больше двух (возвращает противоположное значение лямбда-функции)

Я знаю, что могу просто сделать: not(f(0)) при вызове, но я хочу сделать это внутри функции, а не когда я ее вызываю.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

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

def returns_diff(func):
    return lambda x: not func(x)


f = returns_diff(lambda x: x>2)
f(0) # returns True

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

def returns_diff(func):
    return lambda *args, **kwargs: not func(*args, **kwargs)
1 голос
/ 30 апреля 2020

Могу ли я использовать классы? Или это должны быть просто простые функции? С классами я бы сделал

class diff:
def __init__(self,lambda_func):
    self.lambda_func = lambda_func
def __call__(self,x): 
    return  not(self.lambda_func(x)) 

f = diff(lambda x: x > 2)
f(0) #True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...