我试图检查我的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)
答案 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
函数