我试图用算术和逻辑运算来评估表达式。我对输出很困惑。
例如:
import pandas
import numpy as np
import os
df=pandas.read_excel(os.getcwd() + r"/excel.xlsx", sheet=0, skiprows=0,)
df['order_num']=np.nan
我在&之后给出条件的输出。运营商。是不是我们不能在eval中使用逻辑运算
df.set_value(index, 'order_num', 'somestr')
使用OR运算符,它给出了不同的输出。
当我尝试在表达式中使用浮点值时,它会抛出TypeError
eval('100 >= 1000 & 100 >= 95')
True ==> Wrong
eval('400 >= 0 & 400 >= 0')
True ==> Right
在没有逻辑操作的情况下使用它,
eval('400 >= 5000 | 400 >= 0')
False ==> Wrong
在这里感到困惑。
答案 0 :(得分:3)
Python逻辑运算符名为and
,or
- &
和|
是按位运算符。所以你想要:
eval('400 >= 5000 or 400 >= 0')
话虽如此,eval()
非常不安全,所以不要传递用户输入......
答案 1 :(得分:1)
按位逻辑运算符的优先级高于等式。这里没有eval
特有的内容。
>>> eval('(400 >= 5000) | (400 >= 0)')
True
您应该使用or
才能拥有正确的优先权:
>>> eval('400 >= 5000 or 400 >= 0')
True
如@bruno desthuilliers所述,eval
不是你应该在用户输入上使用的东西。您应该在用户输入和Python操作之间构建自己的映射。如果您真的想构建Python表达式,可能需要查看the ast
module。