alexs at advfn.com
Tue Oct 18 14:21:40 CEST 2005
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)
> 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:
>> 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
>> which makes my code almost unreadable.
> The problem here is that Python's parse trees are of non-trivial
> A page on the compiler.ast module:
> it is, in fact, perfectly possible to write yourself a pre-
> processor for
> your particular application. You may have to fiddle with the token
> 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
> 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.
More information about the Python-list