首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python使用eval计算布尔值的有关问题

2012-09-03 
python使用eval计算布尔值的问题Python codeif __name__ __main__:code compile((var) and True,

python使用eval计算布尔值的问题

Python code
if __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为假

热点排行