将函数分配给lambda将分配调用函数,而不是在

2024-05-29 05:53:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用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中运行这个程序会产生相同的结果。你知道吗


Tags: lambda函数代码event参数堆栈lambdas火车
3条回答

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

如果我在Python3下运行以下代码:

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

main()

它打印:

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

其中x的print打印lambda的元信息-它不打印lambda的内容,而是定义lambda的位置。你知道吗

不知道为什么你的代码不工作,但我怀疑你是在错误的轨道上。你知道吗

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

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的范围,大概是为了评估必要的闭包变量。你知道吗

相关问题 更多 >

    热门问题