Early and late binding [was Re: what does 'a=b=c=[]' do]

Chris Angelico rosuav at gmail.com
Fri Dec 23 17:50:04 EST 2011


On Sat, Dec 24, 2011 at 9:32 AM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
> Yes. But having to manage it *by hand* is still unclean:

Well, my point was that Python's current behaviour _is_ that.

> * you still have to assign the default value to the function assignment
> outside the function, which is inelegant;

C's static variables are initialized inside the function. But since
Python doesn't have that, it doesn't really work that way. (You might
be able to use a decorator to do some cool tricks though.)

> * if you rename the function, the internal lookup func.default_value will
> fail.

Python would benefit some from a "current-function" reference, if
tricks like this were to be encouraged. It'd help with recursion too.
hmmmm...

>>> def Y(func):
	return lambda *args,**kwargs: func(func,*args,**kwargs)

>>> @Y
def foo(me,x):
	if x>5: return x
	return me(me,x+1),7,x

>>> foo(3)
(((6, 7, 5), 7, 4), 7, 3)

Useful? Not very. Maybe as a language feature, but not as a parameter.
But of curiosity value.

ChrisA



More information about the Python-list mailing list