Вот такой вот пример работает по-разному в python2(2.7.3-r3) и python3(3.2.3-r2).
class A:
def __init__(self):
exec('f = lambda x: x')
print(f(1))
a = A()
В python2 работает и возвращает 1. В python3:
Traceback (most recent call last):
File "test.py", line 6, in <module>
a = A()
File "test.py", line 4, in __init__
print(f(1))
NameError: global name 'f' is not defined
Хотелось бы понять почему... Никак не могу. Если определять не внутри метода класса - то вроде работает и в python3. А в чём конкретно разница? Ткните носом в ChangeLog - я такого нигде не видел. :( хотя примерно разницу между python2/3 представляю.
P.S. зачем мне это понадобилось - не спрашивайте, перевожу один проектик с 2 на 3, а там вот такие вот костыли, от него так сразу не избавиться.