Python学习笔记011——内置函数eval()
1 描述
eval() 函数用来执行一个字符串表达式,并返回表达式的值
2 语法
原文
eval(expression[, globals=None[, locals=None]])
expression(sourse) -- 字符串表达式。也即,再写该表达式时不能忘记引号“ ”
=语句字符串
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
= 全局变量,若有,必须是字典。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
=局部变量,若有,必须是字典,若无,则等同于globals
3 返回值
返回表达式expression执行结果
4 练习
4.1 执行动态语句
- >>> eval("1+2")
- 3
- print(eval("1+2")) #3
4.2 globals 与locals 省略
官方示例
- >>> x=1
- >>> eval("x+1")
- 2
也可以时多个参数
- x = 1
- y = 2
- a = eval("x+y")
- print("a =",a)
运行:
- a = 3
注意:
- a = eval("x+y")
等价于
- a = eval("x+y",{"x":1,"y":2},{"x":1,"y":2})
4.2 globals和locals省略问题
- x = 100
- y = 200
- ls = {"x":1,"y":2}
- c = eval("x+y",ls)
- print("c =",c)
- print("x = %d,y = %d"%(x,y))
运行
- c = 3
- x = 100,y = 200
- x = 100
- y = 200
- ls = {"x":1,"y":2}
- gs = {"x":3,"y":4}
- a = eval("x+y",ls,gs)
- 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("-------------------------------")
- 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("-------------------------------")
- 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("-------------------------------")
- 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
运行
- a = 7
- ls[x] = 1,ls[y] = 2
- gs[x] = 3,gs[y] = 4
- x = 100, y = 200
- -------------------------------
- b = 3
- ls[x] = 1,ls[y] = 2
- gs[x] = 3,gs[y] = 4
- x = 100, y = 200
- -------------------------------
- c = 3
- ls[x] = 1,ls[y] = 2
- gs[x] = 3,gs[y] = 4
- x = 100, y = 200
- -------------------------------
- d = 7
- ls[x] = 1,ls[y] = 2
- gs[x] = 3,gs[y] = 4
- x = 100, y = 200
4.4关于变量绑定时的报错
尽管 x 已经定义,但是不是全局变量
- >>> {"x":1}
- {'x': 1}
- >>> eval("x+1") # 在全部变量中没有定义
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- File "<string>", line 1, in <module>
- NameError: name 'x' is not defined
- >>> a = {"x":1}
- >>> eval("a['x']+1") # 这里一定要注意不能内外均是双引号,这样会报错
- 2
- >>> a = {"x":1}
- >>> eval("x+1",a) #在a中有x的定义,可以执行
- 2
5 原技术文档
eval
(expression, globals=None, locals=None)
The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.
The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__’, the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard builtins
module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval()
is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:
- >>> x = 1
- >>> eval('x+1')
- 2
This function can also be used to execute arbitrary code objects (such as those created by compile()
). In this case pass a code object instead of a string. If the code object has been compiled with 'exec'
as the mode argument, eval()
‘s return value will be None
.
Hints: dynamic execution of statements is supported by the exec()
function. The globals()
and locals()
functions returns the current global and local dictionary, respectively, which may be useful to pass around for use by eval()
or exec()
.
See ast.literal_eval()
for a function that can safely evaluate strings with expressions containing only literals.
6 参考
https://www.cnblogs.com/sesshoumaru/p/5995712.html
-
6 参考
Python学习笔记011——内置函数eval()的更多相关文章
- Python学习笔记011——内置函数exec()
1 描述 把一个字符串当成语句执行 exec() 执行储存在字符串或文件中的 Python 语句,相比于 eval() , exec() 可以执行更复杂的 Python 代码. exec函数和ev ...
- python学习笔记011——内置函数pow()
1 语法 pow(x, y[, z]) x -- 数值表达式. y -- 数值表达式. z -- 数值表达式. 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于pow( ...
- python学习笔记011——内置函数dir()
1 描述 dir()函数可以查看(打印)对象的属性和方法.不管时那种对象(python中一切皆对象)类型(数据,模块)都有自己的属性和方法. dir() 函数不带参数时,返回当前范围内的变量.方法和定 ...
- python学习笔记011——内置函数__module__、__name__
1 __module__描述 __module__ : 如果当前模块为顶层模块执行 则打印__main__ 如果当前模块为被调用模块的时候 打印当前模块的名称 2 __module__示例 def f ...
- python学习笔记011——内置函数sorted()
1 描述 sorted() 函数对所有可迭代的对象进行排序操作. sorted() 与sort()函数之间的区别 1 排序对象 sorted:所有可迭代对象的排序 sort:list列表的排序 2 返 ...
- python学习笔记011——内置函数filter()
1 描述 filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表. 2 语法 filter(function, iterable) function -- 函数,过 ...
- python学习笔记011——内置函数sum()
1 描述 sum() 方法对系列进行求和计算. 2 语法 sum(iterable[, start]) iterable:可迭代对象,如列表. start:指定相加的参数,如果没有设置这个值,默认为0 ...
- python学习笔记011——内置函数__sizeof__()
1 描述 __sizeof__() : 打印系统分配空间的大小 2 示例 def fun(): pass print(fun.__sizeof__()) 运行 112
- Python学习笔记-Day3-python内置函数
python内置函数 1.abs 求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...
随机推荐
- nginx 域名绑定 域名, nginx 域名绑定 端口
一.nginx 域名绑定 域名 nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件 ...
- 让ie6(opera)支持微软雅黑字体
一.让IE6支持微软雅黑,添加一句声明: <html lang="zh-CN"> 在网页的HTML标签内加入红色部分的声明,就可以了. 二.让Opera浏览器支持微软 ...
- 触摸事件UITouch的应用
因为UIView或者UIViewController都是继承与UIResponder ,所以都有UITouch这个事件.当用户点击屏幕的时候,会产生触摸事件. 通过UITouch事件,可以监听到开始触 ...
- Faiss学习:一
在多个GPU上运行Faiss以及性能测试 一.Faiss的基本使用 1.1在CPU上运行 Faiss的所有算法都是围绕index展开的.不管运行搜索还是聚类,首先都要建立一个index. import ...
- window中findstr命令的用法
http://www.netingcn.com/window-findstr-command.html findstr是window系统自带的命令,用途是查找指定的一个或多个文件文件中包含(或通过参数 ...
- Gulp构建前端自动化工作流之:常用插件介绍及使用
在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及 ...
- openerp many2many
many2many (0,0,{values}) 根据values里面的信息新建一个记录. (1,ID,{values})更新id=ID的记录(写入values里面的数据) (2,ID) 删除id=I ...
- 【转】Asp.Net MVC4 之Url路由
MVC4常见路由的处理方式 //直接方法重载+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{act ...
- 引入css的几种方式
使用CSS样式的几种方式 CreateTime--2017年10月11日16:45:26 Author:Marydon a.外部样式 a1.链接式(推荐使用) <link href=&quo ...
- 13、java中8中基本类型
一.基本类型介绍 关键字 数据类型 占用字节数 取值范围 默认值 byte 字节型 1个字节 -128~127 0 char 字符型 2个字节 Unicode0~Unicode215-1 \u0000 ...