[Python-Dev] Plea for function/method syntax sugar (PEP 318,
with a different syntax)
Bob Ippolito
bob at redivi.com
Thu Feb 19 11:00:01 EST 2004
On Feb 19, 2004, at 5:58 AM, Michael Hudson wrote:
> Bob Ippolito <bob at redivi.com> writes:
>
>> Some time ago, mwh developed a patch that adds some syntactical sugar
>> to def, which is equivalent to PEP 318 though it has a different and
>> more flexible syntax...
>> previous threads can be easily found here:
>> http://www.google.com/search?q=+site:mail.python.org+%22meth-syntax-
>> sugar%22
>> the latest version of mwh's patch is here:
>> http://starship.python.net/crew/mwh/hacks/meth-syntax-sugar-3.diff
>>
>> Here's a quick overview:
> [snip]
>> What the patch doesn't do:
>> lambda is not allowed in the "sugary expressions list"
>
> Huh? For a bunch of versions of the patch, putting lambda in the
> "sugary expressions list" made Python trip an assert, but I believe I
> fixed that in the most recent version. Or do you mean something else?
Oh ok, it works, but lambda needs to go in parens. Makes sense. I
tried it without parens first, thinking that the closing ] would be
enough syntax for a single lambda to work, because it does for lists
and function calls.
>>> def foo(bar) [lambda a:a]:
File "<stdin>", line 1
def foo(bar) [lambda a:a]:
^
SyntaxError: invalid syntax
>>> def foo(bar) [(lambda a:a)]:
...
>> there's no *expansion and it won't take an actual list so if
>> you want a prebaked list of transformations then you'll have
>> to roll a callable that does it such as:
>>
>> def prebake(*expressions):
>> def _prebake(fn):
>> for transformation in expressions:
>> fn = transformation(fn)
>> return fn
>> return fn
>
> I just don't understand what you mean here.
>
> You're contemplating
>
> def foo() [memoize, *list_of_callables]:
> ...
>
> Eugh!
I'm just saying.. not something I would use :)
>> This syntactical sugar for def is so unbelievably important to PyObjC
>> (and likely other projects) that I am willing to distribute my own
>> modified version of Python if it doesn't make 2.4 (though I would
>> probably use Stackless as the base, but that's another plea for
>> another day).
>>
>> The patch looks like it still applies to CVS HEAD, but there is a
>> little fuzz on hunk 2. I have not tested it yet, but I have tested it
>> against CVS HEAD of the 2.3.3 based Stackless.
>>
>> I'm willing to help however I can in order to get this into Python
>> 2.4.
>
> PEP 306 is (intended to be) a checklist of what's needed.
Looks good. I see "Certain changes may require tweaks to the library
module pycblr", but google doesn't even know what or where that is.
I'll go through it and make a new CVS HEAD patch as well as test
additions and doc changes this weekend. However, I'm not going to deal
with Jython and I obviously can't do anything about pycblr :)
-bob
More information about the Python-Dev
mailing list