Using eval with substitutions
Anthra Norell
anthra.norell at tiscalinet.ch
Thu Aug 31 18:29:53 EDT 2006
Abhishek,
I hesitate to propose this idea, because there's got to be a better (more conventional) way of doing this. Anyway consider
this:
>>> x = "a+b"; y = "x*a; z = "x+y" # Your definitions
>>> import SE
>>> def f (x, y, z):
substitutions = 'z=(%s) | y=(%s) | x=(%s)' % (z, y, x)
print 'substitutions:', substitutions
Formula_Expander = SE.SE (substitutions)
formula = 'x + y + z'
expanded_formula = Formula_Expander (formula)
print 'expanded_formula:', expanded_formula
a = 3; b = 4
print 'eval (expanded_formula):', eval (expanded_formula)
w = eval (Formula_Expander ('y * b'))
print 'w', w
>>> f (x, y, z)
substitutions: z=(x+y) | y=(x*a) | x=(a+b)
expanded_formula: (a+b) + ((a+b)*a) + ((a+b)+((a+b)*a))
eval (expanded_formula): 56
w 84
Well--- it's kind of neat the way it expands the formula. But why not just write functions? As you say, the expansion has to be done
in exactly the right order to complete.
If you want to run this example you'll find SE here: http://cheeseshop.python.org/pypi/SE/2.2%20beta
Regards
Frederic
----- Original Message -----
From: <abhishek at ocf.berkeley.edu>
Newsgroups: comp.lang.python
To: <python-list at python.org>
Sent: Thursday, August 31, 2006 1:15 PM
Subject: Using eval with substitutions
> >>> a,b=3,4
> >>> x="a+b"
> >>> eval(x)
> 7
> >>> y="x+a"
>
> Now I want to evaluate y by substituting for the evaluated value of x.
> eval(y) will try to add "a+b" to 3 and return an error. I could do
> this,
> >>> eval(y.replace("x",str(eval(x))))
> 10
>
> but this becomes unwieldy if I have
> >>> w="y*b"
> and so on, because the replacements have to be done in exactly the
> right order. Is there a better way?
>
> Thanks,
> Abhishek
>
> --
> http://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list