# Generating a List of Lambda

```
def cm():
return [lambda x:i*x for i in range(3)]
for m in cm():
print(m(1),end='')
```

Above is Python 3 sample. Which won't work since the lambdas are bound with `i`

. But `i`

is in rotation. So the Lambdas are created with binding to a var, when the Lambdas are evaluated, the var keeps the last value as "2" in current example. This is common **Late Binding** behavior as usual functions.

## Solution 1: Use iterator rather than list

```
def cm():
return (lambda x:i*x for i in range(3))
for m in cm():
print(m(1))
```

## Solution 2: Creating a Closure to Evaluate Arguments Immediately

Another way to mitigate the **Late Binding** is to create a **Closure** to immediately evaluate the parameters with a temporary variable.

```
def clip():
return [lambda x, i=i: i*x for i in range(3)]
```

However, the closure hacking is still a debating way to take more assumptions on language or interpreter implementation.

## References

http://python-guide-pt-br.readthedocs.io/en/latest/writing/gotchas/#late-binding-closures