J'ai travaillé sur un framework de test de base pour une construction automatisée. Le code ci-dessous représente un simple test de communication entre deux machines utilisant des programmes différents. Avant de faire des tests, je veux les définir complètement. Donc, ce test ne sera pas exécuté avant que tous les tests aient été déclarés. Ce morceau de code est simplement une déclaration d'un test.Lambda et liaisons de variables python
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)
De toute façon, après l'exécution du test, il exécute la fonction définie par 'passIf'. Puisque je veux faire ce test pour plusieurs clients, je les réitère et je définis un test pour chacun - pas de problème. Cependant, après avoir exécuté le test sur le premier client, le 'passIf' évalue le dernier dans la liste des clients, pas le 'client' au moment de la déclaration lambda.
Ma question, alors: quand python lie-t-il des références de variable dans lambdas? Je me suis dit que si l'utilisation d'une variable de l'extérieur du lambda n'était pas légale, l'interprète n'aurait aucune idée de ce dont je parlais. Au lieu de cela, il s'est lié en silence à l'instance du dernier «client».
De même, existe-t-il un moyen de forcer la résolution comme je l'ai voulu?
L'utilisation de la valeur par défaut fonctionne parfaitement. Merci! – stringer