Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在没有lambda的情况下,是否可以实现一行python闭包?_Python 3.x_Closures - Fatal编程技术网

Python 3.x 在没有lambda的情况下,是否可以实现一行python闭包?

Python 3.x 在没有lambda的情况下,是否可以实现一行python闭包?,python-3.x,closures,Python 3.x,Closures,是否可以只在一行中用Python编写以下闭包(例如,作为一个可以传递给map())而不使用lambda的表达式) 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

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

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

这样的黑客,即使你有点作弊,我也会对你的创造力投赞成票。:)考虑到你问题的参数,我认为没有作弊的解决方案:)这就是我为什么要问的原因