国际站seo优化是什么意思,wordpress资料分享网站,软件技术发展前景与趋势,app制作器手机版下载好程序员Python培训之详解eval好与坏#xff0c;文中通过示例代码介绍的非常详细#xff0c;对大家的学习或者工作具有一定的参考学习价值#xff0c;下面我们一起来看一下吧。eval是Python的一个内置函数#xff0c;这个函数的作用是#xff0c;返回传入字符串的表达式的… 好程序员Python培训之详解eval好与坏文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值下面我们一起来看一下吧。 eval是Python的一个内置函数这个函数的作用是返回传入字符串的表达式的结果。想象一下变量赋值时将等号右边的表达式写成字符串的格式将这个字符串作为eval的参数eval的返回值就是这个表达式的结果。 python中eval函数的用法十分的灵活但也十分危险安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。 1、强大之处 举几个例子感受一下字符串与list、tuple、dict的转化。 a [[1,2], [3,4], [5,6], [7,8], [9,0]] b eval(a) b Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]] type(b) Out[4]: list a {1: a, 2: b} b eval(a) b Out[7]: {1: a, 2: b} type(b) Out[8]: dict a ([1,2], [3,4], [5,6], [7,8], (9,0)) b eval(a) b Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0)) 强大吧给个字符串给evaleval给你一个表达式返回值。 eval的语法格式如下 eval(expression[, globals[, locals]]) expression字符串 globals变量作用域全局命名空间如果被提供则必须是一个字典对象。 locals变量作用域局部命名空间如果被提供可以是任何映射对象。 结合globals和locals看看几个例子 传递globals参数值为{“age”:1822} eval({name:linux,age:age},{age:1822}) 输出结果{‘name:‘linux,‘age:1822} 再加上locals变量 age18 eval({name:linux,age:age},{age:1822},locals()) 根据上面两个例子可以看到当locals参数为空globals参数不为空时查找globals参数中是否存在变量并计算。 当两个参数都不为空时先查找locals参数再查找globals参数locals参数中同名变量会覆盖globals中的变量。 2、危险之处 eval虽然方便但是要注意安全性可以将字符串转成表达式并执行就可以利用执行系统命令删除文件等操作。 假设用户恶意输入。比如 eval(__import__(os).system(ls /Users/chunming.liu/Downloads/)) 那么eval()之后你会发现当前文件夹文件都会展如今用户前面。这句其实相当于执行了 os.system(ls /Users/chunming.liu/Downloads/) 那么继续输入 eval(__import__(os).system(cat /Users/chunming.liu/Downloads/tls_asimov_cert.pem)) 代码都给人看了。 再来一条删除命令文件消失。比如 eval(__import__(os).system(rm /Users/chunming.liu/Downloads/车辆转发测试.png)) 所以使用eval一方面享受他的了灵活性同时也要注意安全性。