A gotcha: Python pain point?

Beorn bjorns at gmail.com
Tue Jun 12 01:33:56 CEST 2007


Consider this example:

  >>> def funcs(x):
  ...     for i in range(5):
  ...         def g(): return x + i
  ...         yield g

I would expect the value of x used in g to be that at the function
declaration time, as if you've pass g a (x=x) argument, especially
after reading this post: http://lua-users.org/wiki/LuaScopingDiscussion

But:

  >>> [ fun() for fun in list(funcs(1)) ]
  [5, 5, 5, 5, 5]

Whereas:

  >>> [ fun() for fun in funcs(1) ]
  [1, 2, 3, 4, 5]

This came up while discussing Python pain points at
http://intertwingly.net/blog/2007/06/04/Python-Pain-Points#c1181602242

I can see how it works now, but I haven't found an easy-to-read
documentation on this.

I guess it's debatable if perhaps every i used in the loop shouldn't
be a different i.  It had me fooled, anyways.

Rgds,
Bjorn




More information about the Python-list mailing list