eval功能:将字符串str当成有效的表达式来求值并返回计算结果。

  语法: eval(source[, globals[, locals]]) -> value

  参数说明:

expression(sourse) -- 字符串表达式。也即,再写该表达式时不能忘记引号“ ”

=语句字符串

globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。

= 全局变量,若有,必须是字典。

locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

= 局部变量,若有,必须是字典,若无,则等同于globals

返回值:返回表达式expression执行结果

可以把list,tuple,dict和string相互转化。

#字符串转换成列表

>>>a = "[1,2,3,4,5,6,7]"
>>>type(a)
<type 'str'>
>>> a = eval(a)
>>> print (a)
[1,2,3,4,5,6,7]
>>> type(a)
<type 'list'>

#字符串转换成字典

>>> a = "{1: 'a', 2: 'b',3:’c’}"
>>> type(a)
<type 'str'>
>>> a = eval(a)
>>> print (a)
{1: 'a', 2: 'b', 3:’c’}
>>> type(a)
<type 'dict'>

#字符串转换成元组

>>> a = "(1,2,3,4,5,6,7)"
>>> type(a)
<type 'str'>
>>>a= eval(a)
>>> print (a)
(1,2,3,4,5,6,7)
>>> type(a)
<type 'tuple'>

实例练习:

x = 100
y = 200
ls = {"x":1,"y":2}
gs = {"x":3,"y":4} print("-----globals,locals均提供-----")
a = eval("x+y",ls,gs) # globals, locals均提供
print("a =",a) #a = 7
print("ls[x] = %d,ls[y] = %d"%(ls["x"],ls["y"])) #ls[x] = 1,ls[y] = 2
print("gs[x] = %d,gs[y] = %d"%(gs["x"],gs["y"])) #gs[x] = 3,gs[y] = 4
print("x = %d, y = %d"%(x,y)) #x = 100, y = 200 print("-----globals提供-----")
b = eval("x+y",ls)
print("b =",b) #b = 3
print("ls[x] = %d,ls[y] = %d"%(ls["x"],ls["y"])) #ls[x] = 1,ls[y] = 2
print("gs[x] = %d,gs[y] = %d"%(gs["x"],gs["y"])) #gs[x] = 3,gs[y] = 4
print("x = %d, y = %d"%(x,y)) #x = 100, y = 200 print("-----globals提供,local为None相当于不提供-----")
c = eval("x+y",ls,None)
print("c =",c) #c = 3
print("ls[x] = %d,ls[y] = %d"%(ls["x"],ls["y"])) #ls[x] = 1,ls[y] = 2
print("gs[x] = %d,gs[y] = %d"%(gs["x"],gs["y"])) #gs[x] = 3,gs[y] = 4
print("x = %d, y = %d"%(x,y)) #x = 100, y = 200 print("-----globals为None,相当于不提供, locals提供-----")
d = eval("x+y",None,gs)
print("d =",d) #d = 7
print("ls[x] = %d,ls[y] = %d"%(ls["x"],ls["y"])) #ls[x] = 1,ls[y] = 2
print("gs[x] = %d,gs[y] = %d"%(gs["x"],gs["y"])) #gs[x] = 3,gs[y] = 4
print("x = %d, y = %d"%(x,y)) #x = 100, y = 200

执行结果:

-----globals,locals均提供-----
a = 7
ls[x] = 1,ls[y] = 2
gs[x] = 3,gs[y] = 4
x = 100, y = 200
-----globals提供-----
b = 3
ls[x] = 1,ls[y] = 2
gs[x] = 3,gs[y] = 4
x = 100, y = 200
-----globals提供,local为None相当于不提供-----
c = 3
ls[x] = 1,ls[y] = 2
gs[x] = 3,gs[y] = 4
x = 100, y = 200
-----globals为None,相当于不提供, locals提供-----
d = 7
ls[x] = 1,ls[y] = 2
gs[x] = 3,gs[y] = 4
x = 100, y = 200

内置函数_eval的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(11-12)译 -> 定义内置函数

    11-12. 定义内置函数 问题 想要定义一个在eSQL 和LINQ 查询里使用的内置函数. 解决方案 我们要在数据库中使用IsNull 函数,但是EF没有为eSQL 或LINQ发布这个函数. 假设我 ...

  2. Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数

    dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...

  3. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

  4. DAY5 python内置函数+验证码实例

    内置函数 用验证码作为实例 字符串和字节的转换 字符串到字节 字节到字符串

  5. python之常用内置函数

    python内置函数,可以通过python的帮助文档 Build-in Functions,在终端交互下可以通过命令查看 >>> dir("__builtins__&quo ...

  6. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  7. set、def、lambda、内置函数、文件操作

    set : 无序,不重复,可以嵌套 .add (添加元素) .update(接收可迭代对象)---等于批量 添加 .diffrents()两个集合不同差 .sysmmetric difference( ...

  8. SQL Server 内置函数、临时对象、流程控制

    SQL Server 内置函数 日期时间函数 --返回当前系统日期时间 select getdate() as [datetime],sysdatetime() as [datetime2] getd ...

  9. Python-Day3知识点——深浅拷贝、函数基本定义、内置函数

    一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...

随机推荐

  1. 使用java开源包解析ifc并获取数据(树形结构)

     import java.io.File;import java.util.Collection;import java.util.Enumeration;import java.util.HashM ...

  2. resize和reserve的区别

    转自http://blog.csdn.net/jackywgw/article/details/6248342 首先必须弄清楚两个概念: 1.capacity 指容器在分配新的存储空间之前能存储的元素 ...

  3. jQuery 事件 - trigger() 方法

    <html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...

  4. 《Head First Servlets & JSP》-5-属性和监听

    Servlet初始化参数 在DD文件(web.xml)中 Servlet参数在/参数下: 在Servlet代码中 在Servlet初始化之前不能使用Servlet初始化参数 一旦有了一个Servlet ...

  5. php数据连接

    <?php header("Content-type: text/html;charset=utf-8");//设置编码格式为UTF-8 error_reporting(E_ ...

  6. 判断wifi连接是否可用

    /*** 判断当前连接方式是否是WIFI连接* * @param context* @return*/private static boolean isWifiConnected(Context co ...

  7. asp.net core tags 扩展之 id 和 name

    asp.net core 页面 TagHelper  的 Id 和 Name 属性扩展 . [HtmlTargetElement(Attributes = "asp-name")] ...

  8. java 集合(转载)

    一.集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  9. The King’s Problem 强连通

    题意  有n个城市 m条有向边 将n个城市分成几个州 1.强连通必定在一个州里 2.州里的任意两个城市  u,v     满足u到v 或者v到u  其一即可 先缩点  然后求最小路就覆盖 #inclu ...

  10. Django之博客系统搭建一

    前面已经介绍了django的各种用法,从这一章开始,将实际搭建一个blog系统. 首先我们需要设计blog的模型,在models.py中添加如下内容 # -*- coding: utf-8 -*- f ...