Gary Herron wrote: > 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
So it is eval() is more appropriate when evalution blocks of string code, and getattr() is more efficient for dealing with objects such as h5file object above? Thanks. -- http://mail.python.org/mailman/listinfo/python-list