On 6/25/06, Ka-Ping Yee <[EMAIL PROTECTED]> wrote: > On Sun, 25 Jun 2006, Guido van Rossum wrote: > > What do you think of Nick C's 'once'? > > It's a bit closer to the right meaning... but what about: > > def f(x): > def g(y): > return y + once x > return g > > Does "once" mean not really once here, but "once for each new function > object that's created for g"?
He specifically wants the latter semantics because it solves the problem of binding the value of a loop control variable in an outer scope: def f(n): return [(lambda: once i) for i in range(n)] should return n functions returning the values 0 through n-1. Without the once it returns n identical functions all returning n-1; this is due to outer-scope references referencing variables, not values. (In Scheme this is solved by making the for loop create a new variable for each iteration, but that's not Pythonic.) > > Right. But there are all sorts of objects that are compared by object > > identity (e.g. classes, modules, even functions) which may contain > > mutable components but are nevertheless "constant" for the purpose of > > switch or optimization. Let's not confuse this concept of constness > > with immutability. > > That's a good point. We need a concept like "stable for equality" > separate from "constant", since "constant" and "immutable" will mislead > those who are used to the meanings of these words in other languages. Anyone familiar with const in C++ will have a good grasp of the infinite shades of gray it can express. :-) -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com