从函数返回lambda

时间:2017-08-03 13:37:01

标签: python python-2.7 lambda

我正在尝试理解一小段代码,这对我来说花了很多时间,我仍然不清楚它究竟是如何工作的。

我知道lambda是如何工作的,我过去曾经使用过它们,但这段代码对我来说有点复杂。

def demo(arg):
    return lambda target = None: (target, arg)

with_foo = demo({"foo": 50})
print with_foo()
print with_foo({"bar": 4})

上述代码的输出是

(None, {'foo': 50})
({'bar': 4}, {'foo': 50})

有人可以向我解释如何填充这个target变量并获得此输出吗?

2 个答案:

答案 0 :(得分:4)

def demo(arg):
    return lambda target = None: (target, arg)

这相当于此代码,而不是lambda

def demo(arg):
    def func(target=None):
        return (target, arg)
    return func

(请注意,target = None只是一个带默认值的参数。)

所以我们有一个返回另一个函数的函数。

执行with_foo = demo({"foo": 50})时,结果是与此等效的函数:

def with_foo(target=None):
    return (target, {"foo": 50})

我希望能够解决问题!

答案 1 :(得分:0)

执行前4行后的内容相当于:

def with_foo(target=None):
    return target, {"foo":50}