[Python-ideas] Allow lambda decorators
spir
denis.spir at free.fr
Mon Feb 9 11:09:30 CET 2009
Le Mon, 09 Feb 2009 01:03:39 -0500,
Terry Reedy <tjreedy at udel.edu> a écrit :
> To me, one pretty obvious way to define default non-parameters would be
> to follow the signature with "; <name = expr>+". Where is the PEP, though?
I guess mean the following?
>>> def func_maker():
... fs = []
... for i in range(10):
... def f(n=i):
... return n
... fs.append(f)
... return fs
...
>>> fs = func_maker()
>>> for f in fs: print f(),
...
0 1 2 3 4 5 6 7 8 9
As I understand it, the issue only happens when yielding functions. For instance, the following works as expected:
class C(object):
def __init__(self,n):
self.n = n
def obj_maker():
objs = []
for i in range(10):
obj = C(i)
objs.append(obj)
return objs
The pseudo-parameter trick used to generate funcs is only a workaround, but it works fine and is not overly complicated (I guess). Maybe this case should be documented in introductory literature; not only as a possible trap, also because it helps understanding python's (non-)scoping rules which allow (this is not be obvious when expecting iteration-specific scope):
# name 'item' like silently introduced here
for item in container:
if test(item):
break
print item
Denis
------
la vida e estranya
More information about the Python-ideas
mailing list