py_genetic wrote: > py_genetic wrote: > >> [EMAIL PROTECTED] wrote: >> >>> py_genetic wrote: >>> >>>> How can you make python interpret a string (of py code) as code. For >>>> example if you want a py program to modify itself as it runs. I know >>>> this is an advantage of interpreted languages, how is this done in >>>> python. Thanks. >>>> >>> This might do it... >>> >>> >>>>>> print eval.__doc__ >>>>>> >>> eval(source[, globals[, locals]]) -> value >>> >>> Evaluate the source in the context of globals and locals. >>> The source may be a string representing a Python expression >>> or a code object as returned by compile(). >>> The globals must be a dictionary and locals can be any mappping, >>> defaulting to the current globals and locals. >>> If only globals is given, locals defaults to it. >>> >> For example each time this line is interpreted I would like to use the >> new value of the state var which is a global var. How can I force >> state to be identified and used in this string. >> >> r_table = h5file.root.state_raw_records.neg_records >> >> r_table = eval("h5file.root.state_raw_records.neg_records") ?? >> r_table = h5file.root.eval("state")_raw_records.neg_records ?? eval is >> not a part of root >> >> dont think either of these is very logical? Any ideas? Possibly the >> parser mod? >> > > Got it! > > tmp = "h5file.root."+state+"_raw_records.pos_records" > r_table = eval(tmp) > > works great thanks for the help! > Yes, it works, but this is not a good place to use eval. Now that we see how you want to use it, we can find a *much* better way to do it.
If you want to lookup an attribute of an object, but the attribute name is a string in a variable, then use getattr to do the lookup. If in interpret your code correctly: attrname = state + "_raw_records" obj = getattr(h5file.root, attrname) r_table = obj.pos_records These, of course, could be combined into a single (but not necessarily clearer) line. Gary Herron -- http://mail.python.org/mailman/listinfo/python-list