Python-eval()函数
python eval()
eval(expression, globals= None, locals= None)
--官方文档中的解释:
将字符串str当成有效的表达式子来求值并返回计算结果。
globals(全局)和locals(局部)参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;
如果提供了locals参数,那么它可以是任意的map对象。
python查找变量的顺序:局部--> 全局--> 内置
三个参数的使用:
1、在前两个参数省略的情况下,eval在当前的作用域执行:
a=;
print(eval("a+1"))
执行结果为:11
在这种情况下,后两个参数省略了,所以eval中的a是前面的10。对于eval,它会将第一个expression字符串参数的引号去掉,然后对引号中的式子进行解析和计算。
2、在globals指定的情况下:
a=;
g={'a':}
print(eval("a+1",g))
执行结果为:5
这里面可能有点绕啊,初学者得理理清楚。在这次的代码中,我们在 eval中提供了globals参数,这时候eval的作用域就是g指定的这个字典了,也就是外面的a=10被屏蔽掉了,eval是看不见的,所以使用了a为4的值。
3、在 locals指定的情况下 :
a=
b=
c=
g={'a':,'b':}
t={'b':,'c':}
print(eval('a+b+c',g,t))
执行的结果为:116
这里面就更有点绕人了,此次执行的结果中,a是6,b是100,c是10。我们首先来看一下,对于a为6我们是没有疑问的,因为在上个例子中已经说了,g会屏蔽程序中的全局变量的,而这里最主要的是为什么b是100呢?还记得我们在参数介绍的时候说过,当locals和globals起冲突时,locals是起决定作用的,这在很多编程语言里都是一样的,是作用域的覆盖问题,当前指定的小的作用域会覆盖以前大的作用域,这可以理解为一张小的纸盖在了一张大的纸上,纸是透明的,上面写的东西是不透明的,而它们重合的地方就可以理解成两个作用域冲突的地方,自然是小的显现出来了。
eval()的用法:
可以把list, tuple, dict和string相互转化。例子:
#字符串转数字
a = '2'
b = '3'
c = eval(a + b)
c
Out : 5
type(c)
Out : int #字符串转列表
a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" b = eval(a) b
Out[]: [[, ], [, ], [, ], [, ], [, ]] type(b)
Out[]: list #字符串转字典
a = "{1: 'a', 2: 'b'}" b = eval(a) b
Out[]: {: 'a', : 'b'} type(b)
Out[]: dict #字符串转元组
a = "([1,2], [3,4], [5,6], [7,8], (9,0))" b = eval(a) b
Out[]: ([, ], [, ], [, ], [, ], (, ))
需要注意的是,eval()函数的安全性问题
想一想这种使用环境:需要用户输入一个表达式,并求值。
如果用户恶意输入,例如:
__import__('os').system('dir')
那么eval()之后,你会发现,当前目录文件都会展现在用户前面。
那么继续输入:
open('文件名').read()
代码都给人看了。获取完毕,一条删除命令,文件消失。
Python-eval()函数的更多相关文章
- python——eval()函数
eval()函数用来执行一个字符串表达式,并返回表达式的值. 语法:eval(expression[, globals[, locals]]) x = 4 print(eval('3 * x'))12 ...
- Python eval()函数的用法
Python eval()函数的用法 eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果.所以,结合math当成一个计算器很好用. eval()函数常见作用有 ...
- python eval函数,将列表样式的字符串转化为列表
python eval函数,将列表样式的字符串转化为列表 >>> str_1 = '[1,2,3,4,5,6]'>>> type(str_1)<type 's ...
- Python eval 函数用途
Python eval 函数用途: eval 函数可将字符串转换成列表,元组和字典 实例如下: 可以把list,tuple,dict和string相互转化. ##################### ...
- Python eval 函数妙用
eval 功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source, globals, locals) -> value 参数: source:一个Python ...
- Python eval 函数说明
eval(str [,globals [,locals ]]) -- 函数将字符串str当成有效Python表达式来求值,并返回计算结果. 例 : eval('3+4') ==> ...
- python eval()函数的妙用和滥用
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果: >>> s='8*8' >>> eval(s) 64 >& ...
- python eval函数
eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果. 可以把字符串转为list.tuple .dict 等数据类型 1.把字符串转为字典 ####### ...
- Python:eval的妙用和滥用
时间 2014-07-08 13:05:24 CSDN博客 原文 http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...
- python笔记-调用eval函数出现invalid syntax错误
本来是想打算使用eval函数对变量进行赋值的,没想到出现了invalid syntax错误.源代码如下 In [2]: eval('a = 1') File "<string>& ...
随机推荐
- nginx配置模板问题404
nginx配置模板问题 一.nginx主配置文件如下 cat /etc/nginx/nginx.conf user nginx; worker_processes ; #error_log logs/ ...
- 信用评分卡 (part 4 of 7)
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- Sublime Text3 里使用MarkDown如何预览
安装需要的包: 1.markdown editing 2.markdown preview 具体的步骤是: 1.按住ctrl + shift + p 来调出一个弹出的输入框 :2.输入package ...
- weblogic的基本概念
1.Domain,Administration Server, Managed Server 域包含一个或多个 WebLogic Server 实例. Domain 中包含一个特殊的 WebLogic ...
- 11-SQLServer的事务、存储过程和触发器
一. 事务 在SQLServer中,每条SQL语句,默认就是一条隐式的事务,但是如果我们需要一组SQL语句,那么就需要采用SQLServer提供的特有的标记 来声明事务的开始.提交和回滚了. 事务的开 ...
- DevC++ return 1 exit status
当使用DevC++时编译运行程序出现 return 1 exit status 有可能是因为有在运行的命令窗口未关闭.
- Excel公式使用
IF语句: 想要给F16自动求值,可以利用IF语句,如下: 语句: 同时,还需要设置B27的单元格格式为“常规”
- 使用 JS 实现文字左右跑马灯
Ø 前言 其实,前面两篇已经基本上实现了图片.文字跑马灯,这里为什么还要学下文字左右跑马灯呢?因为,虽然基本一样,但实现起来还是有很大不同的,所以为了完整再补充一下.代码如下: 1. 首先定义 ...
- 可由inetd启动的协议无关时间获取服务器程序
#include <time.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...
- SSH中使用延迟加载报错Exception occurred during processing request: could not initialize proxy - no Session
17:40:17,249 ERROR DefaultDispatcherErrorHandler:42 - Exception occurred during processing request: ...