从Lambda python获取返回值

时间:2015-06-22 14:30:35

标签: python lambda

我试图检查我的lambda功能是否正常工作

rule_defs = {
'and': lambda r: (lambda d, r1, r2: match_rule(r1, d) and match_rule(r2, d),
                  [compile_rule(r[1]), compile_rule(r[2])])}

但是当我尝试运行它时

  

('和',' a',' a')

它只是向我展示了类似于此的内容

<function <lambda> at 0x023C68F0>, ['a', 'a']

根据我的理解,我将['a'.'a']发送到lambda d中,我希望返回值类似于True

我误解了一些基本的东西吗?

编辑:

调用本身不是问题,但返回值是:

  

功能于0x023C68F0&gt;,[&#39; a&#39;,&#39; a&#39;]

而不是值(即 True ),我不确定这是我的通话或功能本身的错误

通过&#34;帮助功能&#34;

完成通话
calling(input)
    return rule_defs[input[0]](input)

(Python 2.7.X)

3 个答案:

答案 0 :(得分:1)

首先,如果你希望你的内部函数产生一个元组,你还应该在启动内部lambda之后添加另一个'(',并在之前关闭它。

示例 -

rule_defs = {
'and': lambda r: (lambda d, r1, r2: (match_rule(r1, d) and match_rule(r2, d), [compile_rule(r[1]), compile_rule(r[2])]))}

或者如果你正确地执行它,并且外部lambda想要返回(lambda, list)的元组,那么调用内部lambda使用rule_defs['and'](<parameter>)[0](<parameters>)

在lambda中定义lambda时,你必须用()调用第一个lambda,然后用()调用第二个lambda。

因此,在您的情况下,您可以使用 -

调用您的函数
rule_defs['and'](r)(d, r1, r2)

或者您可以将其分配给变量,然后使用双重修复调用该变量。

我用 -

测试的例子
>>> rule_defs = { 'and': lambda r: (lambda d ,r1: print(d))}
>>> rule_defs['and'](1)(2,3)
2

答案 1 :(得分:0)

你必须得到你的lamba表达式,然后调用它:

l = rule_defs['and']
l(d, r1, r2)

用您选择的值替换参数,然后您将获得lambda函数的返回值。

您也可以立即执行此操作:

rule_defs['and'](d, r1, r2)

答案 2 :(得分:0)

这是你的代码:

rule_defs = { # define a dict
    'and': lambda r: ( # `lambda r` return a tuple: (lambda, list)
        lambda d, r1, r2: match_rule(r1, d) and match_rule(r2, d),
        [compile_rule(r[1]), compile_rule(r[2])]
    )
}

你应该通过rule_defs['and'](r)[0](d, r1, r2)来调用你的函数 在您的情况下,它将是rule_defs['and'](r)[0]('and', 'a', 'a')

rule_defs['and']将获取函数对象lambda r: (...)

rule_def['and'](r)将调用lambda r函数,并获取返回的元组

rule_def['and'](r)[0]获取返回元组的索引(0),例如功能对象lambda d, r1, r2

rule_defs['and'](r)[0](d, r1, r2)会调用lambda d, r1, r2函数