1

map()是否可以在不使用 lambda的情况下仅在一行中用 Python 编写以下闭包(例如,作为可以传递给 的表达式)?

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))
4

1 回答 1

1

这是可能的(通过使用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,在没有lambda 的情况下做到这一点需要像exec.

于 2018-06-06T14:18:08.850 回答