What is the Python mechanism that makes it so that

```py
[lambda: x for x in range(5)][2]()

```

is 4?

What is the usual trick for binding a copy of x to each lamba expression so that the above expression will equal 2?

---

My final solution:

```py
for template, model in zip(model_templates, model_classes):
    def create_known_parameters(known_parms):
        return lambda self: [getattr(self, p.name)
                             for p in known_parms]
    model.known_parameters = create_known_parameters(template.known_parms)

```