Возможно ли однострочное закрытие питона без лямбды? - PullRequest
0 голосов
/ 06 июня 2018

Можно ли написать следующее замыкание в Python только в одну строку (как выражение, которое, например, можно передать в map()) без использования лямбды?

from operator import add, eq

def sum_equal_to_target(target):
    def f(pair):
        return eq(target, add(*pair))
    return f

sum_equal_to_target = lambda pair: eq(target, add(*pair))
sum_equal_to_target = lambda pair: target == (pair[0] + pair[1))

1 Ответ

0 голосов
/ 06 июня 2018

Это возможно (при использовании exec), но не рекомендуется - есть много недостатков , включая потерю читабельности:

from operator import add, eq

exec('def sum_equal_to_target(target):\n    def f(pair):\n        return eq(target, add(*pair))\n    return f')

print(list(map(sum_equal_to_target(7), [(1,2),(3,4),(5,6)])))
# [False, True, False]

Обратите внимание, что lambda функции - это способ создания (простых) однострочных анонимных функций в Python.AFAICS, для этого без лямбда требуется взломать как exec.

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