By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,547 Members | 1,425 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,547 IT Pros & Developers. It's quick & easy.

run a string as code?

P: n/a
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.

Jul 17 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
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.

Jul 17 '06 #2

P: n/a

mt******@gmail.com 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?

Jul 17 '06 #3

P: n/a

py_genetic wrote:
mt******@gmail.com 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!

Jul 17 '06 #4

P: n/a
py_genetic wrote:
py_genetic wrote:
>mt******@gmail.com 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

Jul 18 '06 #5

P: n/a
Gary Herron wrote:
py_genetic wrote:
py_genetic wrote:
mt******@gmail.com 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.

Jul 18 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.