python3的eval和exec的区别与联系

eval: 
可以把字符串里的字符转换为可执行代码,但只支持一行字符。可以返回执行后得到的值。如下:

f = "3+6+9+8"
s = eval(f)
print(s)
输出:

"C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
26
exec:
可以把字符串里的字符转换为可执行代码,可以支持多行字符。但是拿不到返回结果。如下:

code = ‘‘‘
def func():
print(‘test‘)
return 555
func()
‘‘‘

f = exec(code)
print(‘---‘*5)
print(f)
 输出:

"C:\Program Files\python3\python3.exe" D:/codes_py3/luhy_tool/string_utils/mymethod.py
test
---------------
None

通过exec可以执行动态Python代码,类似Javascript的eval功能;

而Python中的eval函数可以计算Python表达式,并返回结果;

(exec不返回结果,print(eval("…"))打印None);

例如:

>>> exec("print(\"hello, world\")")

hello, world
>>> a = 1

>>> exec("a = 2")

>>> a

2

这里有个scope(命名空间,作用域)的概念,为了不破坏现在的scope,可以新建一个scope(一个字典)执行exec(Javascript没有此功能):

>>> scope = {}

>>> exec("a = 4", scope)

>>> a

2

>>> scope[‘a‘]

4

>>> scope.keys()

dict_keys([‘a‘, ‘__builtins__‘])

__builtins__包含了所有的内建函数和值

原文地址:https://www.cnblogs.com/ExMan/p/10415785.html

时间: 2024-10-17 08:07:01

python3的eval和exec的区别与联系的相关文章

eval与exec的区别,以及变量的作用范围

# eval与exec的区别:eval 有返回值,而 exec没有返回值 # 这两个函数都是执行python语句,注意:里面传的是字符串的格式 a = eval('1+2') a # 这里a有值 3 b = exec('1+2') b # 这里b没有值 def printstr(): print('hello word') return 1 eval('printstr()') hello word 1 #可以返回参数 exec('printstr()') hello word # 这里就没有返

深度辨析 Python 的 eval() 与 exec()

Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个. 大部分函数是我们经常使用的,例如 print().open() 与 dir(),而有一些函数虽然不常用,但它们在某些场景下,却能发挥出不一般的作用.内置函数们能够被"提拔"出来,这就意味着它们皆有独到之处,有用武之地. 因此,掌握内置函数的用法,就成了我们应该点亮的技能. 在<Python进阶:如何将字符串常量转为变量?>这篇文章中,

Python中的eval()、exec()及其相关函数

Python中的eval().exec()两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是

&lt;转&gt;Python3.x和Python2.x的区别介绍

1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果.Py3.1性能比Py2.5慢15%,还有很大的提升空间. 2.编码Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:>>> 中国 = 'china'>>>print(中国)china 3. 语法1)去除了<>,全部改用!=2)去除``,全部改用repr()3)关键词加入a

Shell脚本之:EVAL and EXEC command

由于工作上的需要,花了点时间,研究了一下eval和exec这两个shell内建特殊的命令.因为用的不是很多,所以还是有一点比较隐晦的.. 1.eval 该命令是bashshell中内建的一个命令,相比其他的命令来说还是有一点的难度.该命令后面所跟的内容都认为是参数,但是会两次扫描其参数,第一次扫描会将参数中的变量进行替换,第二次扫描会将后面的参数当作一个shell中的命令组合来执行命令.其常用的情况是对变量的处理下面看几个例子: 案例1:直接组合命令[[email protected] shel

python内置函数 eval()、exec()以及complie()函数

1.eval函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值. eval(expression[, globals[, locals]]) 参数 expression -- 表达式. globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象. locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象. 返回值 返回表达式计算结果. 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式(注意eval不支持任何形式的赋值

[转]Python中的eval()、exec()及其相关函数

刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, local

day10 Python作用域 Python2.7与Python3.x的类继承的区别及其他

一.Python作用域   1.Python中无块级作用域 if 1 == 1: name = 'test' print(name) #输出会报错,因为name的作用域仅限于if下的代码块,而不属于全局   2.Python中以函数为作用域 def func(): func_name = 'func_test' print(func_name) #这里同样会报错,因为变量func_name的作用于func函数中   3.Python作用域链,层层嵌套,使用时从内向外找   4.Python的作用

&lt;%#eval() %&gt;和&lt;%#bind() %&gt; 的区别

1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateString ={0:d} ,则 必须把 属