Python 将可打印字符串与可逆转换
问题描述
我正在寻找Python中的解决方案,我可以将条件字典传递给一个函数,并将结果打印出来,如下所示:
input_conditions = { 1: (a2>b2) & (b2<c2) ,
2: (a2>b2) & (b2>c2) ,
3: (a2>b2) & (b2==c2) }
def myfunc(conds):
a2 = np.array([1,2,3,4,5])
b2 = np.array([1,1,1,1,1])
c2 = np.array([5,4,3,2,1])
for k,v in conds.items(): print(f'{k}.) {v}: {np.sum(conds[k])}')
return
myfunc(input_conditions)
预期结果:
1.) (a1>b1) & (b1<c1): 3
2.) (a1>b1) & (b1>c1): 0
3.) (a1>b1) & (b1==c1): 1`
上述方法显然不起作用,因为(1)input_conditions在myfunc中的声明之前引用了a2,b2,c2,并且(2)print命令将打印每个条件的结果数组,而不是条件本身的字符串。
我目前正在使用以下解决方案,它起作用:
def currentfunc():
a1 = np.array([1,2,3,4,5])
b1 = np.array([1,1,1,1,1])
c1 = np.array([5,4,3,2,1])
conds = { 1: (a1>b1) & (b1<c1) ,
2: (a1>b1) & (b1>c1) ,
3: (a1>b1) & (b1==c1) }
descr = { 1: '(a1>b1) & (b1<c1)' ,
2: '(a1>b1) & (b1>c1)' ,
3: '(a1>b1) & (b1==c1)' }
for k,v in descr.items(): print(f'{k}.) {v}: {np.sum(conds[k])}')
return
currentfunc()
结果:
1.) (a1>b1) & (b1<c1): 3
2.) (a1>b1) & (b1>c1): 0
3.) (a1>b1) & (b1==c1): 1`
但是,我又在想能否在声明数组之前定义条件字典,并且能否在不手动复制粘贴到字符串字典中的情况下打印出每个条件。
解决方案
如果您确定要评估的是代码而不是用户输入,可以在这里使用eval函数。
注意:对用户输入使用eval函数是有风险的。
import numpy as np
descr = { 1: '(a1>b1) & (b1<c1)' ,
2: '(a1>b1) & (b1>c1)' ,
3: '(a1>b1) & (b1==c1)' }
def currentfunc():
a1 = np.array([1,2,3,4,5])
b1 = np.array([1,1,1,1,1])
c1 = np.array([5,4,3,2,1])
for k,v in descr.items(): print(f'{k}.) {v}: {np.sum(eval(descr[k]))}')
currentfunc()