[英]Getting a return value from Lambda python
我正在尝试检查我的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>,['a','a']
而不是一个值(即True ),我不确定这是我的调用还是函数本身的问题
调用是通过“帮助功能”完成的
calling(input)
return rule_defs[input[0]](input)
(Python 2.7.X)
首先,如果您希望内部函数产生一个元组,则还应该在启动内部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)
元组,则可以使用rule_defs['and'](<parameter>)[0](<parameters>)
来调用内部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
您必须获取您的lamba表达式,然后调用它:
l = rule_defs['and']
l(d, r1, r2)
用您选择的值替换参数,然后您将获得lambda函数的返回值。
您也可以一次执行:
rule_defs['and'](d, r1, r2)
这是您的代码:
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
函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.