unexpected behaviour of lambda expression

leonhard.vogt at gmx.ch leonhard.vogt at gmx.ch
Mon Oct 9 03:42:45 EDT 2006


Please consider that example:
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'foo'
>>> f = lambda x: s
>>> f(None)
'foo'
>>> s = 'bar'
>>> f(None)
'bar'
>>> del(s)
>>> f(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 1, in <lambda>
NameError: global name 's' is not defined

It seems to me, that f is referencing the name s instead of the string
object bound to it
i would expect the analogous behaviour to the following example:
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'foo'
>>> f = s
>>> f
'foo'
>>> s = 'bar'
>>> f
'foo'

I could work around this but I am interested why there is that
difference.
Leonhard




More information about the Python-list mailing list