Bill Campbell wrote:
On Sat, Dec 04, 2004, Alan Gauld wrote:

I'm having trouble understanding the difference between eval and

exec.

eval evaluates an *expression* - that is something that returns a
value.


...

Both are extremely dangerous functions from a security
and maintenance/reliability pouint of view and should be
used very rarely.


True enough, but useful upon occassion.  In particular I've had a
question on the back burner for a while.  Suppose I have a
dictionary of database instances, dbtables, keyed on table name,
and I want a general way of creating variables with the name of
the table so I'm not accessing the dictionary.  Would something
like this work:

# dbtables is already built
for table in dbtables.keys():
        exec("%s = dbtables['%s']" % (table, table))


Yes it works, since it sticks that binding in the module namespace. But the question is, why would you want to do that? You already have the names in the dictionary... and to round off the irony, namespaces in Python are implemented as dictionaries! Is there a compelling reason why you need this?


As has been already said, the thumbrule is that exec and it's brother eval are to be used in only a very few specialized situations. For example, giving the oportunity to the user of an application to interact directly with it via Python code. For the majority of the situations there is always a better (and faster and...) solution.

With my best regards,
G. Rodrigues
_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to