Hygenic Macros

Alex Stapleton alexs at advfn.com
Tue Oct 18 14:25:53 CEST 2005


Ahar got it

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/384122

Would something like that be any use?

On 18 Oct 2005, at 13:21, Alex Stapleton wrote:

> I seem to remember a rather ugly hack at some point in the past that
> created a new "operator" like so
>
> A |dot| B
>
> where dot was an object which had the OR operator for left and right
> arguments redefined seperately so that it only made sense when used
> in that syntax.
>
> I guess you could hack something together along the same lines. I
> just wish I could remember what it was called, it's on the
> ActiveState Cookbook somewhere.
>
> On 18 Oct 2005, at 13:17, Adriaan Renting wrote:
>
>
>> Using numarray/pylab there's also dot:
>>
>>
>>>>> from pylab import *
>>>>> A = array(range(10))
>>>>> B = array(range(10))
>>>>> A * B
>>>>>
>>>>>
>> [ 0, 1, 4, 9,16,25,36,49,64,81,]
>>
>>
>>>>> dot(A, B)
>>>>>
>>>>>
>> 285
>>
>> It might also make your code more readable. I would like "A dot B",
>> but even using ipython
>> I can only get as close as "dot A, B"
>>
>>
>>
>>>>> Dan Farina <nntp.20.drfarina at recursor.net> 10/18/05 1:33 pm >>>
>>>>>
>>>>>
>> David Pokorny wrote:
>>
>>
>>> Hi,
>>>
>>> Just wondering if anyone has considered macros for Python. I have  
>>> one
>>> good use case. In "R", the statistical programming language, you can
>>> multiply matrices with A %*% B (A*B corresponds to pointwise
>>> multiplication). In Python, I have to type
>>>
>>> import Numeric
>>> matrixmultiply(A,B)
>>>
>>> which makes my code almost unreadable.
>>>
>>> Thanks,
>>> David
>>>
>>>
>>
>> The problem here is that Python's parse trees are of non-trivial
>> ugliness.
>>
>> A page on the compiler.ast module:
>> http://docs.python.org/lib/node792.html
>>
>> it is, in fact, perfectly possible to write yourself a pre-
>> processor for
>> your particular application.  You may have to fiddle with the token
>> you
>> want for notation depending on how the AST fleshes out (% is used
>> by at
>> least a couple of things, after all).  My cursory familiarity with
>> python grammar suggests to me that this particular choice of token
>> could
>> be a problem.
>>
>> I would say try it and see.  Keep in mind though that since
>> Python's AST
>> is not a trivial matter like it is in Lisp and the like that doing
>> metaprogramming of this sort probably falls into the category of  
>> black
>> magic unless it turns out to be very trivial.
>>
>> Another option is to define your own tiny class that will override  
>> the
>> __mult__ method so that you can simply do:
>>
>> A * B
>>
>> Which may not be what you want.
>>
>> df
>> -- 
>> http://mail.python.org/mailman/listinfo/python-list
>>
>> -- 
>> http://mail.python.org/mailman/listinfo/python-list
>>
>>
>
> -- 
> http://mail.python.org/mailman/listinfo/python-list
>




More information about the Python-list mailing list