eval函数python3_python3---函数eval()

eval(source[, globals[, locals]])

作用:

将字符串str当成有效的表达式来求值并返回计算结果。参数:source:一个Python表达式或函数compile()返回的代码对象;globals:可选。必须是dictionary;locals:可选。任意map对象。

实例:

1 #################################################

2字符串转换成列表3 >>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

4 >>>type(a)5

6 >>> b =eval(a)7 >>> printb8 [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]9 >>>type(b)10

11 #################################################

12字符串转换成字典13 >>> a = "{1: 'a', 2: 'b'}"

14 >>>type(a)15

16 >>> b =eval(a)17 >>> printb18 {1: 'a', 2: 'b'}19 >>>type(b)20

21 #################################################

22字符串转换成元组23 >>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"

24 >>>type(a)25

26 >>> b =eval(a)27 >>> printb28 ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))29 >>>type(b)30

1 #test eval() and locals()

2 x = 1

3 y = 1

4 num1 = eval("x+y")5 print(num1)6

7 defg():8 x = 2

9 y = 2

10 num3 = eval("x+y")11 print(num3)12 num2 = eval("x+y",globals())13 #num2 = eval("x+y",globals(),locals()) ##如果 globals() 和 locals()同时出现 两者有交叉部分的时候,则后者会覆盖掉前者的作用,也就是使用后者环境中的变量 ,参考:http://lib.csdn.net/article/python/62300?knid=165 具体理解

14 print(num2)15

16g()17

18 print locals()["x"]19 print locals()["y"]20 print globals()["x"]21 print globals()["y"]

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4

eval()使用原因:

1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。

2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

注:

eval有安全性问题,比如用户恶意输入就会获得当前目录文件

eval("__import__('os').system('dir')")

1 >>> importos2 >>> 'os' inglobals()3True4 >>> os.system('whoami')5 ap\zhail

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eva

转自:https://www.cnblogs.com/guyuyuan/p/6884115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值