我在火车/运输模拟中得到了一段代码,它给了我一些意想不到的结果。在我的代码中,我将函数分配给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中运行此程序会产生相同的结果。
答案 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)