How can you use the python exec keyword inside functions?
-
5What exactly is giving you trouble? What have you tried so far?Mark Rushakoff– Mark Rushakoff2010年04月13日 02:22:54 +00:00Commented Apr 13, 2010 at 2:22
-
4what is it that you are trying to do?ghostdog74– ghostdog742010年04月13日 02:23:13 +00:00Commented Apr 13, 2010 at 2:23
3 Answers 3
It's going to damage your function's performance, as well as its maintainability, but if you really want to make your own code so much worse, Python2 (this will not work in Python3, there you need to use the second alternative) gives you "enough rope to shoot yourself in the foot" (;-):
>>> def horror():
... exec "x=23"
... return x
...
>>> print horror()
23
A tad less horrible, of course, would be to exec in a specific dict:
>>> def better():
... d = {}
... exec "x=23" in d
... return d['x']
...
>>> print better()
23
This at least avoids the namespace-pollution of the first approach.
3 Comments
Alex's answer works slightly differently in Python 3.
Since exec() is a function in Python 3, use the following pattern-
def better():
d = {}
exec("x=23", d)
return d['x']
print better()
23
See this question for more details- Behavior of exec function in Python 2 and Python 3
3 Comments
exec('x=23', globals()) but note that this will add all variables generated inside exec into your global scope. It'll also overwrite any variables with the same name.exec(code_string, globals()) was exactly what I needed to import and use functions from interactively. Thanks @H.Saxena!Yes.
class A:
def __init__(self):
self.a1 = ''
self.a2 = ''
def populate():
att1 = raw_input("enter a1: ")
att2 = raw_input("enter a2: ")
my_object = A()
eval("my_obj.a1 = att1")
eval("my_obj.a2 = att2")
if eval("my_obj.a2") == 2:
print "Hooray! the value of a2 in my_obj is 2"
Hope this helps
3 Comments
eval() in Python only accepts expressions, and assignment is a statement, not an expression.