Alternative to multi-line lambdas: Assign-anywhere def statements

Clarence clarence1126 at gmail.com
Wed Feb 11 09:28:20 EST 2015


On Wednesday, February 11, 2015 at 8:04:33 AM UTC-5, Albert van der Horst wrote:
> In article <mailman.18121.1422151185.18130.python-list at python.org>,
> Ethan Furman  <ethan at stoneleaf.us> wrote:
> >-=-=-=-=-=-
> >
> >On 01/24/2015 11:55 AM, Chris Angelico wrote:
> >> On Sun, Jan 25, 2015 at 5:56 AM, Ethan Furman <ethan at stoneleaf.us> wrote:
> >>> If the non-generic is what you're concerned about:
> >>>
> >>> # not tested
> >>> dispatch_table_a = {}
> >>> dispatch_table_b = {}
> >>> dispatch_table_c = {}
> >>>
> >>> class dispatch:
> >>>   def __init__(self, dispatch_table):
> >>>     self.dispatch = dispatch_table
> >>>   def __call__(self, func):
> >>>     self.dispatch[func.__name__] = func
> >>>     return func
> >>>
> >>> @dispatch(dispatch_table_a)
> >>> def foo(...):
> >>>    pass
> >>
> >> That's still only able to assign to a key of a dictionary, using the
> >> function name.
> >
> >This is a Good Thing.  The def statement populates a few items, __name__ being one of them.  One
> >of the reasons lambda
> >is not encouraged is because its name is always '<lambda>', which just ain't helpful when the
> >smelly becomes air borne!  ;)
> 
> That's the reason why my ideal Python doesn't attach a name to a lambda denotation:
> 
> x -> x**2
> 
> is a function object, not something that has a name.
> 
> It is not until we assign the object to a name (which becomes thereby a function)
> that the __name__ thingy comes into play, like so.
> 
> f = x->x**2
> or
> f = x-> return x**2
> for those who don't like Algol68
> 
> I've heard arguments that with -> the __name__ is not filled in correctly.
> I can't see why the parser would understand more easily
> 
> def f(x):
>     return x**2
> 
> than
> 
> f = x->
>     return x**2
> 
> [I'm striving for simplification, doing away with both the lambda and
> the def keywords. This is not a proposal for a language change, I'm
> trying to explore possibilities here. ]
> 
> >
> >--
> >~Ethan~
> 
> Groetjes Albert
> -- 
> Albert van der Horst, UTRECHT,THE NETHERLANDS
> Economic growth -- being exponential -- ultimately falters.
> albert at spe&ar&c.xs4all.nl &=n http://home.hccnet.nl/a.w.m.van.der.horst

And then you do
    g = f
And what then? Or even
    g = f = x -> x ** 2
Of course, you can say that problem already exists
    def f(x): return x ** 2
    g = f
But that goes to the heart of the issue: part of the purpose of def is to give a function a name.



More information about the Python-list mailing list