exec()函数

exec函数用于执行存储在字符串中的python语句

>>> exec("x=1")
>>> x

但有时候,直接这样执行可能会污染我们的命名空间,比如下面的例子,我们使用python内置的abs函数求绝对值。

>>> abs(-)

>>> exec("abs='xyz'")
>>> abs(-)
File "<stdin>", line , in <module>
TypeError: "str" object is not callable

在执行abs函数时报错了,类型错误,字符串类型对象不能被调用,原因就在于我们使用exec函数将字符串xyz赋值给了abs,abs此时已经不再表示求绝对值的函数了。为了防止出现这种情况,我们在调用exec函数时,可以给它传递第二个参数——命名空间,即就是一个字典。

>>> abs(-1)
1
>>> scope = {}
>>> exec("abs='xyz'", scope)
>>> abs(-1)
1
>>>scope['abs']
'xyz'

这样,通过exec执行赋值语句创建的变量就位于scope中,不会污染我们的命名空间。

eval()函数

eval用于执行存储在字符串中的python表达式

>>> eval("1+2+3+4+5")
15

与exec函数一样,我们也可以给eval函数提供命名空间。

总结

1、exec函数执行的是python语句,没有返回值,eval函数执行的是python表达式,有返回值;

2、exec函数和eval函数都可以传入命名空间作为参数,实际上,可以向exec函数和eval函数提供两个命名空间,他们的函数定义为:

exec(source, globals=None, locals=None)

eval(source, globals=None, locals=None)

其中globals和locals都是可选参数,globals表示全局命名空间,必须是字典,locals表示局部命名空间,可以是任何映射。

3、需要注意的是,exec函数和eval函数都是将用户提供的字符串作为代码执行,将无法控制代码的行为,会带来严重的安全隐患,使用的时候要慎重。

 

python中的exec()函数和eval()函数的更多相关文章

  1. Python中的exec、eval使用实例

    Python中的exec.eval使用实例 这篇文章主要介绍了Python中的exec.eval使用实例,本文以简洁的方式总结了Python中的exec.eval作用,并给出实例,需要的朋友可以参考下 ...

  2. python中的exec()、eval()以及complie()

    参考博客:http://www.cnblogs.com/yyds/p/6276746.html 1.eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式( ...

  3. 【python】dir(__builtins__)查看python中所用BIF(内置函数)

    dir(__builtins__)查看python中所用BIF(内置函数)

  4. python中lambda,map,reduce,filter,zip函数

    函数式编程 函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.简单来讲,函 ...

  5. Python中的exec、eval的区别

    通过exec可以执行动态Python代码,类似Javascript的eval功能: 而Python中的eval函数可以计算Python表达式,并返回结果: (exec不返回结果,print(eval( ...

  6. python中的exec和eval

    exec 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 返回值 exec 返回值永远为 None. 需要说明的是在 ...

  7. python中通过字符串名来调用函数

    强调:eval()函数功能虽然强大,但是也很危险,这个方法需要慎重使用. 利用python中的内置函数 eval() ,函数说明: def eval(*args, **kwargs): # real ...

  8. python 中一些常用的内置函数

    一.常用内置函数 abs(x) 返回绝对值,参数为int float,非字符只能num all(iterable) 如果迭代对象里面的所有值都为真就返回True.all([1, 2, -7]) --- ...

  9. 【转】Python 中map、reduce、filter函数

    转自:http://www.blogjava.net/vagasnail/articles/301140.html?opt=admin 介绍下Python 中 map,reduce,和filter 内 ...

随机推荐

  1. 洛谷p1902刺杀大使题解

    题目传送门 方法:二分答案+dfs 二分一个mid,此次刺杀的最大伤害,作为判断条件来dfs,二分,更新. 我们二分一个答案mid来表示一个界限,如果当前这个格子的伤害代价比mid小则可以走否则就不走 ...

  2. 【字符串】 Z-algorithm

    Z-algorithm Algorithm Task 给定一个文本串 \(S\) 和一个模式串 \(T\),求 \(T\) 对于 \(S\) 的每个后缀子串的公共前缀子串. Limitations 要 ...

  3. ML学习笔记(1)

    2019/03/09 16:16 归一化方法: 简单放缩(线性归一化):这种归一化方法比较适用在数值比较集中的情况.这种方法有个缺陷,如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用 ...

  4. 【louguP2234】[HNOI2002]营业额统计(链表)

    题目链接 离线用链表维护,先按权值排序,建立链表,记录每一天在链表的位置,然后按天数从大到小查询,查询完删除 #include<algorithm> #include<iostrea ...

  5. R语言中的特殊值 NA NULL NaN Inf

    这几个都是R语言中的特殊值,都是R的保留字, NA:Not available  表示缺失值   用 is.na() 来判断是否为缺失值 NULL:表示空值,即没有内容  用 is.null() 来判 ...

  6. python3.5以上版本,typing模块提高代码健壮性

    一 前言 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数类型或者返回值类型,很有可能导致一些类型没有指定方法,在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数, ...

  7. Spring Security教程(四)

    在前面三个博客的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session ...

  8. .netcore使用MimeKit发送邮件

    以163邮箱为例,借助MimeKit nuget安装:MimeKit类库,源码地址:https://github.com/jstedfast/MimeKit 发送方法如下: #region 邮件发送 ...

  9. 爬虫(一)基础知识(python)

    1.1 定义 网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛.网络爬虫就是根据网页的地址来寻找网页的,也就是URL.举一个简单的 ...

  10. PHP strlen 对中文 的定义

    $zhStr = ‘您好,中国!’; // gbk编码下每个中文字符所占字节为2echo strlen($zhStr); // 输出:12 //utf-8编码下每个中文字符所占字节为3 echo st ...