eval()
优点
最近在python写的过程中,偶尔会发现字符串有时候是个比较困扰人的问题,因为假设要让用户输入调用的方法或者是对应字典中的字符串,必须要将str字符串变成有效的表达式。而我在研究如何解决这个问题的过程中,也是接触到了eval()函数,这个函数的功能可以说是非常强。
a="aaa"
b=eval(a)
print(b)
>>>aaa
这正是eval函数的常规用法,对于计算器来说,eval是一个很好的选择
而它的高级用法,无非也是list,tuple,dict和字符串的相互转化。而在这也就不再赘述了。
缺点
所谓越强大的东西,副作用也就越大。而eval函数之所以这么强大,也是牺牲了一部分的安全性,不管你输入什么样的字符串,它都毫无保留的转换为可操作的表达式。
比如下面的表达式
__import__('os').system('dir')
作为可操作的表达式,它的作用是将你所有的用户目录都展示出来。假设你的eval函数没做任何的防护措施,就造成了很严重的泄露。然而,这样的问题也有解决方法
比如:1、自行写检查函数;2、使用ast.literal_eval:自行查看DOCUMENT
然而这样的话函数反而也就不那么方便了。
而除了eval函数,python还有另一种方法转化字符串,那就是反射,关于反射的问题,就下次再说吧。