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

作用:

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

实例:

 #################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串转换成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>
 #test eval() and locals()
x = 1
y = 1
num1 = eval("x+y")
print (num1) def g():
x = 2
y = 2
num3 = eval("x+y")
print (num3)
num2 = eval("x+y",globals())
#num2 = eval("x+y",globals(),locals())
print (num2) g() print locals()["x"]
print locals()["y"]
print globals()["x"]
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')")
 >>> import os
>>> 'os' in globals()
True
>>> os.system('whoami')
ap\zhail

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval

最新文章

  1. MMORPG大型游戏设计与开发(服务器 AI 控制器)
  2. 作业七:团队项目——Alpha版本冲刺阶段009
  3. shll 变量
  4. 调Windows 7的图片浏览器查看图片
  5. TI CC2541 BLE协议栈蓝牙MAC 地址
  6. 结对2.0--复利计算WEB升级版
  7. log4Net配置详解
  8. Couchbase 使用方法
  9. Android Studio 入门(转)
  10. Django_自带的admin管理页面
  11. gnuplot画图中文标注相关问题
  12. Windows Socket的UDP和TCP编程介绍
  13. Java Script中常见操作
  14. 【CERC2016】【BZOJ4792】村庄 搜索
  15. iOS开发基础-九宫格坐标(5)
  16. 【JavaScript】常用的数据类型的处理方式
  17. 安装 telnet
  18. Hadoop版本的选择问题
  19. css-使不同大小的图片在固定大小的容器中居中
  20. Jenkins远程调度Shell命令

热门文章

  1. 键盘没有Home键和End键的完美解决办法
  2. 主攻ASP.NET.4.5.1 MVC5.0之重生:Web项目语音朗读网页文本,简单语音提示浏览状态
  3. Python的文件读写与存储
  4. 微信小程序与微信公众号同一用户登录问题
  5. RHCE学习笔记 管理1 (第三~五章)
  6. Classloader机制
  7. 【bzoj1036】树的统计[ZJOI2008]树链剖分+线段树
  8. java 发送http 的get|post 请求
  9. 用TinyXml做XML解析示例 TinyXml查找唯一节点及修改节点操作
  10. 将本地jar包制作成maven依赖