Hello, In a Python program I'm writing I need to dynamically generate functions[*] and store them in a dict. eval() can't work for me because a function definition is a statement and not an expression, so I'm using exec. At the moment I came up with the following to make it work:
def build_func(args): code """def foo(...)...""" d = {} exec code in globals(), d return d['foo'] My question is, considering that I really need code generation[*] - "is there a cleaner way to do this ?" Also, what happens if I replace globals() by None ? Additionally, I've found indentation to be a problem in such constructs. Is there a workable way to indent the code at the level of build_func, and not on column 0 ? Thanks in advance Eli [*] I know that each time a code generation question comes up people suggest that there's a better way to achieve this, without using exec, eval, etc. But in my case, for reasons too long to fully lay out, I really need to generate non-trivial functions with a lot of hard-coded actions for performance. And there's no problem of security whatsoever. If someone is very interested in the application, I will elaborate more. -- http://mail.python.org/mailman/listinfo/python-list