New submission from Tomáš Dvořák <dvto...@gmail.com>:

I have this python script, and run it in python 2.7.2 (installed from EPD_free 
7.1-2 (32-bit), but I guess this has nothing to do with EPD.
----8<---fail.py------

class X(object):
    pass

x = X()
items = ["foo", "bar", "baz"]

for each in items:
    setattr(x, each, lambda: each)
    
print("foo", x.foo())    
print("bar", x.bar())
print("baz", x.baz())

----8<---fail.py------

I'd naively expect it to print 
('foo', 'foo')
('bar', 'bar')
('baz', 'baz')

,but it surprisingly (and annoyingly) outputs
('foo', 'baz')
('bar', 'baz')
('baz', 'baz')

Please, tell me that this is a bug :) I'd hate it if this was the intended 
behaviour. I spent two hours today before I found out this was the cause of my 
program to fail.

Best regards,
  Tomáš Dvořák

----------
components: None
messages: 144819
nosy: Tomáš.Dvořák
priority: normal
severity: normal
status: open
title: setattr misbehaves when used with lambdas inside for loop
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue13094>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to