【发布时间】:2010-04-28 15:57:34
【问题描述】:
我一直在为自动化构建开发一个基本的测试框架。下面的一段代码代表了使用不同程序的两台机器之间的通信的简单测试。在我实际进行任何测试之前,我想完全定义它们 - 所以在声明所有测试之前,下面的这个测试实际上不会运行。这段代码只是一个测试的声明。
remoteTests = []
for client in clients:
t = Test(
name = 'Test ' + str(host) + ' => ' + str(client),
cmds = [
host.start(CMD1),
client.start(CMD2),
host.wait(5),
host.stop(CMD1),
client.stop(CMD2),
],
passIf = lambda : client.returncode(CMD2) == 0
)
remoteTests.append(t)
无论如何,在测试运行之后,它会运行 'passIf' 定义的函数。因为我想为多个客户端运行这个测试,所以我正在迭代它们并为每个客户端定义一个测试——没什么大不了的。但是,在第一个客户端上运行测试后,“passIf”会评估客户端列表中的最后一个,而不是 lambda 声明时的“客户端”。
然后我的问题是:python 什么时候在 lambdas 中绑定变量引用?我想如果使用 lambda 外部的变量是不合法的,解释器将不知道我在说什么。相反,它默默地绑定到最后一个“客户端”的实例。
另外,有没有办法按照我的意图强制解决?
【问题讨论】:
标签: python