Python EVAL() - AND 语句
Python EVAL() - AND statements
我正在尝试使用 EVAL() 同时计算两个语句,但我遇到了一些问题:
metrics_dict = {}
def testA(n):
print ("testA done")
global metrics_dict
result = n**n
metrics_dict["metricA"] = result
return result
def testB(n):
print ("testB done")
global metrics_dict
result = n**n
metrics_dict["metricB"] = result
return result
def testC(n):
print ("testC done")
global metrics_dict
result = n**n
metrics_dict["metricC"] = result
return result
logic = "testA(2) > 10 and testB(3) > 0"
如果我 运行 像这样对“逻辑”进行评估:
x = eval(logic)
我得到“testA done”和 FALSE,我相信这是因为因为 testA 是 FALSE,所以 EVAL() 不会继续对 testB 进行第二次检查,此外我的 metrics_dict里面有 metricA,所以我的问题是,有没有办法强制 eval 遍历我的逻辑语句中的所有检查,我需要能够一直检查和记录这两个测试,是否无关紧要它是 FALSE,FALSE 或 FALSE,TRUE 或 TRUE,FALSE 或 TRUE,TRUE。
谢谢大家
与其搞乱 eval
,您将无法回避 AND
的逻辑工作方式,您应该考虑将检查逻辑编码为独立语句的集合:
>>> logic = [testA(2) > 10, testB(3) > 0]
testA done
testB done
>>> logic
[False, True]
然后您仍然可以通过 all(logic)
或其他类似的归约得到最终结果。
我正在尝试使用 EVAL() 同时计算两个语句,但我遇到了一些问题:
metrics_dict = {}
def testA(n):
print ("testA done")
global metrics_dict
result = n**n
metrics_dict["metricA"] = result
return result
def testB(n):
print ("testB done")
global metrics_dict
result = n**n
metrics_dict["metricB"] = result
return result
def testC(n):
print ("testC done")
global metrics_dict
result = n**n
metrics_dict["metricC"] = result
return result
logic = "testA(2) > 10 and testB(3) > 0"
如果我 运行 像这样对“逻辑”进行评估:
x = eval(logic)
我得到“testA done”和 FALSE,我相信这是因为因为 testA 是 FALSE,所以 EVAL() 不会继续对 testB 进行第二次检查,此外我的 metrics_dict里面有 metricA,所以我的问题是,有没有办法强制 eval 遍历我的逻辑语句中的所有检查,我需要能够一直检查和记录这两个测试,是否无关紧要它是 FALSE,FALSE 或 FALSE,TRUE 或 TRUE,FALSE 或 TRUE,TRUE。
谢谢大家
与其搞乱 eval
,您将无法回避 AND
的逻辑工作方式,您应该考虑将检查逻辑编码为独立语句的集合:
>>> logic = [testA(2) > 10, testB(3) > 0]
testA done
testB done
>>> logic
[False, True]
然后您仍然可以通过 all(logic)
或其他类似的归约得到最终结果。