[Python-ideas] For-loop variable scope: simultaneous possession and ingestion of cake

Arnaud Delobelle arnodel at googlemail.com
Sat Oct 4 09:25:54 CEST 2008


On 4 Oct 2008, at 05:12, Greg Ewing wrote:

> Terry Reedy wrote:
>
>> Your intended-to-be-motivating example ... is a toy snippet that  
>> illustrates some points of Python behavior, but which I see no use  
>> for in real application code.
>
> My example wasn't intended to prove the existence of the
> problem, only refer to an already-acknowledged one. Its
> existence is attested by the fact that people regularly
> get tripped up by it.
>
> Here's a more realistic example:
>
>  menu_items = [
>    ("New Game", 'new'),
>    ("Resume", 'resume'),
>    ("Quit", 'quit')
>  ]
>
>  buttons = []
>  for title, action in menu_items:
>    buttons.append(Button(title, lambda: getattr(game, action)()))
>

Isn't this better as:

     buttons.append(Button(title, getattr(game, action)))

Unless you want late binding of 'game', but that would be confusing.

> which gives you three buttons that all execute the
> 'quit' action.

-- 
Arnaud




More information about the Python-ideas mailing list