为什么我的“评估”是这样的?功能不起作用,我认为它可以打印'b',但不是
a='''b="ddd"'''
eval(repr(a))
print str(a)
print b
请尝试使用代码,而不是文本,因为我的英语不是很好,谢谢
a='''b="ddd"'''
eval(repr(a))
print str(a)
print b
Please try to use the code, rather than text, because my English is not very good, thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用:
而不是:
脚本:
问题是您实际上执行的是语句
'b="ddd"'
,它不是对b
的赋值,而是对字符串。当给定一个字符串时,
eval()
内置函数将其作为表达式(而不是语句)进行计算并返回结果。您可以通过给 eval() 提供一个代码对象来运行非表达式代码,该对象是我们上面使用compile()
创建的。在这种情况下,它会运行代码并返回None
。如果您只需输入以下内容,您就可以看到类似的效果:
Clearly
7=d
is not valid Python, but'7=d'
is, 原因如上所述。expr()
、repr()
和compile()
内置函数的描述足以解决这个问题,被发现 此处。在做出这个答案的过程中,没有内置组件受到损害。Use:
instead of:
Transcript:
The problem is that you're actually executing the statement
'b="ddd"'
which is not an assignment tob
but an evaluation of the string.The
eval()
built-in, when given a string, evaluates it as an expression (not a statement) and returns the result. You can geteval()
to run non-expression code by giving it a code object, which we create withcompile()
above. In that case it runs the code and returnsNone
.You can see a similar effect if you just enter:
Clearly
7=d
is not valid Python, yet'7=d'
is, for the reason explained above.Descriptions of the
expr()
,repr()
andcompile()
built-ins, adequate enough to work this out, were found here. No built-ins were harmed during the making of this answer.eval 用于计算表达式(获取结果)。您想要的是 Python 代码的动态执行,这是通过 exec 完成的:
另请注意,在将字符串传递给任一函数之前,不应调用 repr()。您已经有一个字符串,调用 repr() 创建字符串的字符串表示形式。
eval is used to evaluate (get the result of) an expression. What you want is dynamic execution of Python code, which is done with exec:
Also note that you should not call repr() before passing the string to either function. You already have a string, calling repr() creates a string representation of a string.
重新考虑您是否真的需要使用
eval()
。例如,您可以像这样使用globals()
:但是也许您应该使用的只是一个 字典:
Reconsider whether you really need to use
eval()
. For example, you can useglobals()
like this:But perhaps what you should probably be using is just a dictionary: