One point to keep in mind is that eval() is not quite as efficient at execution time as fixed code. For example if we declare a function “sum(a, b)”, “c = sum(d, e)” will execute slightly faster than “eval( ‘c = d + e’ )” because the argument for eval() is a string that must be fully parsed for each execution while sum() only needs to be parsed as the program is loaded. This difference hardly matters if the eval() is executed infrequently, but could be a drag if placed inside of a heavily used loop.
Please note that I’m not trying to make a huge deal out of this. Any project is a compromise between development time, ease of maintenance, memory use, and execution time. In the early days of 1k (or less) RAM and one megahertz processors, we carefully crafted our memory use and run times. We had virtually no run time error checking because we didn’t have enough space and extensive error checking might require more time than the event than we were attempting to react to and control. Now, we have multi Gigahertz processors and don’t blink if there are many megabytes of operating system resources tied up with displaying or printing “Hello World”.