Python Lambdas and Variable Bindings [duplicate]

The client variable is defined in the outer scope, so by the time the lambda is run it will always be set to the last client in the list.

To get the intended result, you can give the lambda an argument with a default value:

passIf = lambda client=client: client.returncode(CMD2) == 0

Since the default value is evaluated at the time the lambda is defined, its value will remain correct.

Another way is to create the lambda inside a function:

def createLambda(client):
    return lambda: client.returncode(CMD2) == 0
#...
passIf = createLambda(client)

Here the lambda refers to the client variable in the createLambda function, which has the correct value.

Leave a Comment