Macro like functionality for shorthand variable names
Larry Bates
larry.bates at websafe.com`
Sat Jun 7 15:44:33 EDT 2008
Tilman Kispersky wrote:
> I have python code in a class method translated from C++ that looks
> sort of like this:
>
>>>> self.dydt[1] = self.a * (self.b * self.y[0] - self.y[1])
>
>
> To make this more readable in C++ I had made macros to achieve this:
> #define du (dydt[1])
> #define u (y[1])
> #define V (y[0])
>
> du = a * (b * V - u);
>
>
> I realize the value of not having macros in Python. They've tripped
> me up more than once in C++. My question is:
> Is there any way to write a shorterhand more readable version of the
> python code above? I'm doing several calculations one after the other
> and some of the lines are quite long.
Names in Python point to objects so you can bind several names to the same location.
>>>> self.dydt[1] = self.a * (self.b * self.y[0] - self.y[1])
The following will work.
a = self.a
b = self.b
u = self.y[0]
V = self.y[1]
self.dytd[1] = a * (b * V - u)
In addition to making the lines shorter, I'm pretty sure they will be slightly
faster because lookups on the local variables is slightly faster than on the
instance variables (self.?).
Note: I think your parenthesis are incorrect in the equation above. If they
aren't then no parenthesis are necessary since multiplication takes precedence
over subtraction.
Hope this helps.
-Larry
More information about the Python-list
mailing list