我一直在爲自動化構建構建基本的測試框架。下面的代碼代表了使用不同程序的兩臺機器之間通信的簡單測試。在我實際做任何測試之前,我想完全定義它們 - 所以下面的測試實際上並沒有運行,直到所有的測試都被聲明爲止。這段代碼只是一個測試的聲明。Python Lambdas和變量綁定
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之外的變量是不合法的,那麼解釋者就不知道我在說什麼。相反,它默默地綁定到最後一個「客戶端」的實例。
另外,有沒有辦法像我打算的那樣強制解決方案?
使用默認值可以很好地工作。謝謝! – stringer 2010-04-28 16:27:55