[Python-ideas] Macros for Python

Haoyi Li haoyi.sg at gmail.com
Wed Apr 24 17:05:22 CEST 2013


>I am a little surprised that you would base a cutting edge extension on Py
2. Do you have it working with 3.3 also?

It's not really a cutting edge extension yet, it's more a completely-crazy
"you did WHAT?" proof of concept to explore the space of possibilities. 2.7
was what we had installed, so we just ran with it. Haven't done any testing
at all on 3.4, but if the project turns out well (i.e. the functionality is
actually usable, and people are interested) we could look at porting it. I
don't think the core of the system will change much, but the individual
macros may have to be re-written since the ASTs are slightly different.

> a, b = 1, 2
print("{a} apple and {b} bananas".format(**locals()))
print("%(a)s apple and %(b)s bananas" % locals())

Yes, you can do it like that. You can't do more complex stuff though, like

    "%{a ** b} is %{a} to the power of %{b}"

Perhaps I should put it in the readme, since I already have a unit test for
it.

You actually can get a syntax like that without macros, using
stack-introspection, locals-trickery and lots of `eval`. The question is
whether you consider macros more "extreme" than stack-introspection,
locals-trickery and `eval`! A JIT compiler will probably be much happier
with macros.






On Wed, Apr 24, 2013 at 10:35 AM, Terry Jan Reedy <tjreedy at udel.edu> wrote:

> On 4/23/2013 11:49 PM, Haoyi Li wrote:
>
>> I thought this may be of interest to some people on this list, even if
>> not strictly an "idea".
>>
>> I'm working on MacroPy <https://github.com/lihaoyi/**macropy<https://github.com/lihaoyi/macropy>>,
>> a little
>>
>> pure-python library that allows user-defined AST rewrites as part of the
>> import process (using PEP 302).
>>
>
> From the readme
> '''
> String Interpolation
>
> a, b = 1, 2
> c = s%"%{a} apple and %{b} bananas"
> print c
> #1 apple and 2 bananas
> '''
> I am a little surprised that you would base a cutting edge extension on Py
> 2. Do you have it working with 3.3 also?
>
> '''Unlike the normal string interpolation in Python, MacroPy's string
> interpolation allows the programmer to specify the variables to be
> interpolated inline inside the string.'''
>
> Not true as I read that.
>
> a, b = 1, 2
> print("{a} apple and {b} bananas".format(**locals()))
> print("%(a)s apple and %(b)s bananas" % locals())
> #1 apple and 2 bananas
> #1 apple and 2 bananas
>
> I rather like the anon funcs with anon params. That only works when each
> param is only used once in the expression, but that restriction is the
> normal case.
>
> I am interested to see what you do with pattern matching.
>
> tjr
>
> ______________________________**_________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/**mailman/listinfo/python-ideas<http://mail.python.org/mailman/listinfo/python-ideas>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130424/f87aa81e/attachment.html>


More information about the Python-ideas mailing list