为何Python中exec("2*4")无作用?如何实现函数表达式求值?
问题原因及解决方法
exec()本身不返回表达式计算结果:exec()的设计定位是执行Python语句(比如赋值、循环、函数定义这类),它不会返回执行表达式的结果。哪怕你执行
exec("2*4"),这个乘法运算确实会被执行,但exec()不会把计算出来的8返回给你,它默认返回None。所以你代码里return exec(strings),最终返回的永远是None,自然得不到预期的数值结果。应该用eval()处理表达式求值:如果你的需求是计算表达式字符串的数值结果,正确的工具是
eval()——它专门用来解析并计算表达式字符串,会直接返回计算后的结果。
举个简单对比:
# 用exec的情况 result = exec("2*4") print(result) # 输出 None # 用eval的情况 result = eval("2*4") print(result) # 输出 8
如果你的表达式里包含替换后的参数(比如替换x为3,得到"3*5+10"),只要当前作用域里没有冲突的变量定义,eval()也能正确计算:
expr = "3*5+10" print(eval(expr)) # 输出25
内容的提问来源于stack exchange,提问作者cronge
相关产品推荐
相关产品推荐

