2015-06-22 108 views
0

我想检查我的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')

它只是表明我类似的东西的这个

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

据我所知这是我送的['a'.'a']到从中我想类似True

返回值的λd我误解基本的东西?

编辑:

主叫本身是没有问题的,但返回值为:在0x023C68F0

函数>,[ '一个', 'A']

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

呼叫与 “帮助功能”

calling(input) 
    return rule_defs[input[0]](input) 

(Python的2.7.X)

+0

_“当我尝试运行它......” _到底是如何运行的,你呢?我猜测'('和','a','a')'是你的论点,但这不足以复制你的问题。请[MCVE](http://stackoverflow.com/help/mcve)。 – Kevin

+0

...什么?你为什么要嵌套'lambda's?它应该做什么?我强烈建议为此使用独立的函数,以便您可以更轻松地测试并记录其行为。 – jonrsharpe

+0

你有两个函数,第一个看起来是规则列表,并返回你用三个参数调用的函数......这里有很多,你没有向我们展示......比如你怎么称呼它事情。 –

回答

0

首先,如果你希望你的内部函数产生一个元组,你也应该开始内部拉姆达后添加另一个“(”和之前关闭它。

示例 -

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, list)一个元组,然后外lambda来调用内部拉姆达使用rule_defs['and'](<parameter>)[0](<parameters>)

在lambda内定义lambda时,必须先调用第一个lambda与(),然后再调用第二个lambda与()

所以你的情况,你会打电话给你的函数 -

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

或者你可以把它分配给一个变量,然后调用与双paranthesis变量。

例子我测试 -

>>> rule_defs = { 'and': lambda r: (lambda d ,r1: print(d))} 
>>> rule_defs['and'](1)(2,3) 
2 
+0

外部lambda返回一个元组,而不仅仅是内部lambda。 – Duncan

+0

对不起,我不明白。 –

+0

谢谢,了解问题并更新了答案。 –

0

你必须让你的兰巴表达式,然后把它做到:

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

更换用你选择的值的参数,那么你将得到lambda函数的返回值。

你也可以马上做:

rule_defs['and'](d, r1, r2) 
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功能