繁体   English   中英

从Lambda python获取返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM