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