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

时间:2016-01-21 21:35:30

标签: python python-3.x python-3.4

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

我使用lambdas,这样当我把函数放在堆栈上时,它会附带我想要运行它的参数。

这是我的问题。我有一个名为TrainArrivesAtDock()的函数,它应该创建另一个lambda并将其推入堆栈。但是,我创建的lambda不具备我要求的函数,它保持TrainArrivesAtDock()

以下是代码:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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的范围,可能是因为它可以评估必要的闭包变量。

答案 1 :(得分:0)

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

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

main()

打印:

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

x的打印输出lambda的元信息 - 它不打印lambda的内容,但是定义了lambda的位置。

不知道为什么你的代码不起作用,但我怀疑你的错误轨道。

答案 2 :(得分:-1)

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