代码之家  ›  专栏  ›  技术社区  ›  bakester14

将函数分配给lambda将分配调用函数,而不是指定的函数

  •  -1
  • bakester14  · 技术社区  · 10 年前

    我在火车/航运模拟中得到了一段代码,它给了我一些意想不到的结果。在我的代码中,我将函数分配给lambdas,将它们归档到堆栈中,然后弹出堆栈,依次完成每个函数。有些函数将更多函数放在堆栈上。

    我使用lambdas,所以当我将函数放在堆栈上时,它会带有我想要运行它的参数。

    这是我的问题。我有一个函数名为 TrainArrivesAtDock() 这应该创建另一个lambda并将其推到堆栈上。然而,我创建的lambda不包含我要求它的函数,它包含 火车到达码头() !

    下面是代码:

    event = lambda: TrainUnloadComplete(crew)
    insertEventAtCorrectTime(currentTime + trainQueue[0].remainingUnloadTime, event)
    

    但在检查IDE中的事件变量时,我看到了以下内容: <function TrainArrivesAtDock.<locals>.<lambda> at 0x0287BB28>

    显然这不是正确的实现,但这是我的错还是解释器的错?我正在使用PyTools for VS2012,我认为这可能是问题所在,但在IDLE中运行此程序会产生相同的结果。

    3 回复  |  直到 10 年前
        1
  •  1
  •   Jared Goguen    10 年前

    看起来您的代码可能运行正常。考虑以下示例:

    def get_lambda(closure_var):
        return lambda: closure_var
    
    string = "Hey!"
    foo = get_lambda(string)
    print(foo)
    print(foo())
    

    输出:

    <function get_lambda.<locals>.<lambda> at 0x7f6b90281bf8>
    Hey!
    

    看来 TrainArrivesAtDock.<locals>.<lambda> 指 lambda 在中创建,大概是为了可以评估必要的闭包变量。

        2
  •  0
  •   Penguin Brian    10 年前

    如果我在Python 3下运行以下代码:

    def main():
        x = lambda: print("hello")
        print(x)
        x()
    
    main()
    

    它打印:

    <function main.<locals>.<lambda> at 0x7f39297012f0>
    hello
    

    x的打印打印lambda的元信息-它不打印lambda的内容,而是在lambda被定义的地方。

    不知道为什么你的代码不能工作,但我怀疑你走错了方向。

        3
  •  -2
  •   bakester14    10 年前

    哇,我真傻。正如上面的o_o注释一样,IDE给我的代码片段是指lambda创建的位置,而不是lambda本身。这是我的代码中的一个错误,我误读了IDE。