"Beorn" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] | 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,
Since x is constant during the funcs call, does not matter. Perhaps you meant i, which does vary? If so, put i=i in the header -- or perhaps ii=i to give two different names to two things which are made to have the same value. In any case, the simple rule is that default argument expressions in the *header* are evaluated at definition time while the *body* (past the doc string, if any) is executed after a call. Some people expect defaults to be executed every call; others expect part of the body to be executed once. Both get in trouble. For nested functions, outer call time is inner definition time and this can confuses. Defining (but delaying the call of) multiple identical inner functions, as you do in the first example below, also confuses. | especially | after reading this post: http://lua-users.org/wiki/LuaScopingDiscussion Lua is not Python. | 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] As Calderone explained, the simple rule works as long as one keeps track of what is called when. Terry Jan Reedy -- http://mail.python.org/mailman/listinfo/python-list