python使用eval计算布尔值的有关问题
python使用eval计算布尔值的问题Python codeif __name__ __main__:code compile((var) and True,
python使用eval计算布尔值的问题
Python codeif __name__ == "__main__": code = compile("(var) and True", "", "eval") var = "False or False" exec code print eval(code) print eval("(False or False) and True")
大家好,上面这段代码运行的结果是
True
False
难道不是应该两次都为False才对吗?不明白为什么第一次在用eval计算时为True。
之前本来就是直接用eval来计算某个表达式的值的,后来发现效率比较低,就改为compile+eval的模式,下面这篇文章分析过这个问题。
http://lucumr.pocoo.org/2011/2/1/exec-in-python/
[解决办法]个人理解
cmpile()函数编译过后返回一个代码对象,形成了一个整体
val就被作为一个变量,后面传值时是字符串
也就是相当于 表达式变成了 (val) and True
传值后("False or False") and True
因为任意非空字符串 都可以当成True,所以结果就是True
而直接eval 则是编译成 (False or False)and True
[解决办法]var = "False or False" 是个字符串来的,所以"False or False" and True为真
你认为的估计应该写成var = False or False,那么(False or False) and True为假