是否可以在不使用lambda的情况下只在一行中在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))
这是可能的(通过使用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
这样的黑客。