evel函数python python evil

为什么要用evel函数,直接用PHP代码不行吗eval能解决evel函数python的事情,直接写PHP代码肯定一样能解决 , 因为eval() 作用就是把字符串按照
PHP
代码来计算 , 但是有些场景下有这个解决手段能让你事半功倍 , 为什么要去绕路呢?
举个栗子evel函数python我数据库里存储了用户输入的公式,1 1-2*3/2,如果没有eval能想象到要解决这个公式计算得写一大段函数来实现,但现在我们只要
1eval('return 1 1-2*3/2;')
就搞定了,你说用PHP代码行吗?行!但是何苦呢?
python生成10个账号1、列表解析(数据量少)
[i for i in range(10)]
2、生成器(可迭代对象)表达式(数据量大)
生成器自动是实现迭代器协议(next方法) , 用next取值后 , 该值不会再产生了 , 省内存 。
( i for i in range(10) )
2、生成器函数
yield:yield 1 相当于return返回值,但可以执行多次;x=yield保留函数运行状态; 接受send 传过来的值复制给x,若没有send返回none 。
send可以使生成器接着运行(有点像next),generator.send(none):send把none传给yield,进行触发 。
def test():
yield 1
yield 2
yield 3
response=test()#拿到生成器,response为生成器对象 。
执行:print( response.__next__() )
3、生成器函数深入
例1
(1)、def product_baozi():
re=[ ]
for i in range(10):
re.append("baozi%s" %i)
return re
(2)def product_baozi():
for i in range(10):#循环生成列表
yield "baozi%s" %i
pro_g=product_baozi()#生成器对象
#取值
for i in pro_g:
print(i)
或者:baozi=pro_g.__next__()#一个一个取值
注意:(2)的效率比(1)高 , 省内存,保留函数运行状态(状态挂起);生成器只能遍历一次
例2
def get_population():
with open ("人口普查",“r”encoding=‘utf-8’) as f:
yield i
data=https://www.04ip.com/post/get_population() #可迭代对象,只能迭代一次
#求和
ret=0
for p in data:#相当与data.__next__() (next(t))
p_dict=eval(p)#转成字典
ret =p_dict[ 'population ' ]
或者:all_population=sum(eval(i)['population']for i in data)#sum(可迭代对象)
#比例
for i in data:#注意data中的值被使用完了
rate= eval(i)['population'] / all_population
注意:evel:把字符串里面的数据类型提取出来,字符串里面的表达式运算出来
java里面有没有类似JavaScript中的evel函数的方法packagemathTools;
/**
*Eval.java
*
*Createdon2006年4月10日,下午3:46
*
*Tochangethistemplate,chooseTools|TemplateManager
*andopenthetemplateintheeditor.
*
*支持运算符:-*/%][!|=
*其中:
*]表示大于等于
*[表示小于等于
*!表示不等于
*|表示或
*&表示与
*=表示是否等于
*
*支持函数:sqrt,square,ceil,sin,cos,asin,acon.tan.atan,log,exp具体含义见calFunction代码
*
*/
/**
*
*@authorTrumplet
*
*/
importjava.util.Stack;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassEval{
publicstaticStringOPTS=" -*/%][!|=#";
publicObjectcalculate(Stringexpression)throwsExpressionException{
try{
StackOpts=newStack();
StackValues=newStack();
Stringexp=expression "#";
intnCount=exp.length(),nIn,nOut,nTemp;
Opts.push("#");
Stringtemp="",optOut="",optIn="",value1="",value2="",optTemp="",opt="",temp1="";
intnFun=0;
booleanisFun=false;
for(inti=0;inCount;){
nTemp=0;
opt=exp.substring(i,i 1);
isFun=false;
temp1="";
while(inCount){
if(!temp1.equals("")){
if(opt.equals("(")){
nFun;
isFun=true;
}elseif(opt.equals(")")){
nFun--;
}
}
if((nFun0)||((!isFun)this.isValue(opt))){
temp1 =opt;
nTemp;
opt=exp.substring(i nTemp,i nTemp 1);
}else{
if(isFun){
temp1 =opt;
nTemp;
}
break;
}
}
if(temp1.equals("")){
temp=opt;
}else{
temp=temp1;
}
if(nTemp0){
i=i nTemp-1;
}
temp=temp.trim();
if(this.isValue(temp)){
temp=this.getValue(temp);
Values.push(temp);
i;
}else{
optIn=Opts.pop().toString();
nIn=this.getOptPriorityIn(optIn);
nOut=this.getOptPriorityOut(temp);
if(nIn==nOut){
i;
}elseif(nInnOut){
Stringret="";
value1=Values.pop().toString();
value2=Values.pop().toString();
ret=String.valueOf(this.calValue(value2,optIn,value1));
Values.push(ret);
}elseif(nInnOut){
Opts.push(optIn);
Opts.push(temp);
i;
}
}
}
returnValues.pop();
}catch(ExpressionExceptioneE){
throweE;
}catch(Exceptione){
thrownewExpressionException("表达式" expression "格式非法!");
}
}
protectedintgetOptPriorityOut(Stringopt)throwsExpressionException{
if(opt.equals(" ")){
return1;
}elseif(opt.equals("-")){
return2;
}elseif(opt.equals("*")){
return5;
}elseif(opt.equals("/")){
return6;
}elseif(opt.equals("%")){
return7;
}elseif(opt.equals("")){
return11;
}elseif(opt.equals("")){
return12;
}elseif(opt.equals("]")){
return13;
}elseif(opt.equals("[")){
return14;
}elseif(opt.equals("!")){
return15;
}elseif(opt.equals("|")){
return16;
}elseif(opt.equals("")){
return23;
}elseif(opt.equals("=")){
return25;
}elseif(opt.equals("#")){
return0;
}elseif(opt.equals("(")){
return1000;
}elseif(opt.equals(")")){
return-1000;
}
thrownewExpressionException("运算符" opt "非法!");
}
protectedintgetOptPriorityIn(Stringopt)throwsExpressionException{
if(opt.equals(" ")){
return3;
}elseif(opt.equals("-")){
return4;
}elseif(opt.equals("*")){
return8;
}elseif(opt.equals("/")){
return9;
}elseif(opt.equals("%")){
return10;
}elseif(opt.equals("")){
return17;
}elseif(opt.equals("")){
return18;
}elseif(opt.equals("]")){
return19;
}elseif(opt.equals("[")){
return20;
}elseif(opt.equals("!")){
return21;
}elseif(opt.equals("|")){
return22;
}elseif(opt.equals("")){
return24;
}elseif(opt.equals("=")){
return26;
}elseif(opt.equals("(")){
return-1000;
}elseif(opt.equals(")")){
return1000;
}elseif(opt.equals("#")){
return0;
}
thrownewExpressionException("运算符" opt "非法!");
}
protectedStringgetOPTS(){
returnOPTS;
}
protectedbooleanisValue(StringcValue){
StringnotValue=https://www.04ip.com/post/this.getOPTS()"()";
returnnotValue.indexOf(cValue)==-1;
}
protectedbooleanisOpt(Stringvalue){
returnthis.getOPTS().indexOf(value)=0;
}
protecteddoublecalValue(Stringvalue1,Stringopt,Stringvalue2)throwsExpressionException{
try{
doubledbValue1=Double.valueOf(value1).doubleValue();
doubledbValue2=Double.valueOf(value2).doubleValue();
longlg=0;
if(opt.equals(" ")){
returndbValue1 dbValue2;
}elseif(opt.equals("-")){
returndbValue1-dbValue2;
}elseif(opt.equals("*")){
returndbValue1*dbValue2;
}elseif(opt.equals("/")){
returndbValue1/dbValue2;
}elseif(opt.equals("%")){
lg=(long)(dbValue1/dbValue2);
returndbValue1-lg*dbValue2;
}elseif(opt.equals("")){
if(dbValue1dbValue2)
return1;
else
return0;
}elseif(opt.equals("")){
if(dbValue1dbValue2)
return1;
else
return0;
}elseif(opt.equals("]")){
if(dbValue1=dbValue2)
return1;
else
return0;
}elseif(opt.equals("[")){
if(dbValue1=dbValue2)
return1;
else
return0;
}elseif(opt.equals("!")){
if(dbValue1!=dbValue2)
return1;
else
return0;
}elseif(opt.equals("|")){
if(dbValue10||dbValue20)
return1;
else
return0;
}elseif(opt.equals("")){
if(dbValue10dbValue20)
return1;
else
return0;
}elseif(opt.equals("=")){
if(dbValue1==dbValue2)
return1;
else
return0;
}
}catch(Exceptione){
thrownewExpressionException("值" value1 "或" value2 "在进行"opt "运算时非法!");
}
thrownewExpressionException("运算符" opt "非法!");
}
protectedStringgetValue(StringoldValue)throwsExpressionException{
Stringreg="^([a-zA-Z0-9_] )\\(([a-zA-Z0-9_.()] )\\)$";
if(this.isFunctionCal(oldValue)){
Patternp=Pattern.compile(reg);
Matcherm=p.matcher(oldValue);
m.find();
returncalFunction(m.group(1),m.group(2));
}
returnoldValue;
}
protectedbooleanisFunctionCal(Stringvalue){
Stringreg="^([a-zA-Z0-9_] )\\(([a-zA-Z0-9_.()] )\\)$";
returnvalue.matches(reg);
}
protectedStringcalFunction(Stringfunction,Stringvalue)throwsExpressionException{
StringlowerFun=function.toLowerCase();
doubledb=0;
try{
db=Double.valueOf(this.getValue(value)).doubleValue();
if(lowerFun.equals("log")){
returnString.valueOf(Math.log(db));
}elseif(lowerFun.equals("square")){
returnString.valueOf(Math.pow(db,2));
}elseif(lowerFun.equals("sqrt")){
returnString.valueOf(Math.sqrt(db));
}elseif(lowerFun.equals("sin")){
returnString.valueOf(Math.sin(db));
}elseif(lowerFun.equals("asin")){
returnString.valueOf(Math.asin(db));
}elseif(lowerFun.equals("cos")){
returnString.valueOf(Math.cos(db));
}elseif(lowerFun.equals("tan")){
returnString.valueOf(Math.tan(db));
}elseif(lowerFun.equals("atan")){
returnString.valueOf(Math.atan(db));
}elseif(lowerFun.equals("ceil")){
returnString.valueOf(Math.ceil(db));
}elseif(lowerFun.equals("exp")){
returnString.valueOf(Math.exp(db));
}
}catch(Exceptione){
thrownewExpressionException("函数" function "值" value "非法!");
}
thrownewExpressionException("函数" function "不支持!");
}
publicstaticvoidmain(String[]args){
Evalbe=newEval();
//Stringexp="sin(ceil(100))*29 20 30*3 0|0|1 11*5 2=2";
//Stringexp="sin(ceil(sqrt(100)))*29 20 30*3 0|0|1 11*5 2=2";
Stringexp="8/(3-8/3)";
try{
System.out.println(be.calculate(exp));
}catch(ExpressionExceptioneE){
System.out.println(eE.getMessage());
}
}
//表达式异常类代码:
publicclassExpressionExceptionextendsException{
publicExpressionException(Stringmsg){
super(msg);
}
}
}
【evel函数python python evil】关于evel函数python和python evil的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读