eval(str [,globals [,locals ]])函数将字符串str当成有效Python表达式来求值,并返回计算结果。

同样地, exec语句将字符串str当成有效Python代码来执行.提供给exec的代码的名称空间和exec语句的名称空间相同.

最后,execfile(filename [,globals [,locals ]])函数可以用来执行一个文件,看下面的例子:

>>> eval('3+4')

7

>>> exec 'a=100'

>>> a

100

>>> execfile(r'c:\test.py')

hello,world!

>>>

默认的,eval(),exec,execfile()所运行的代码都位于当前的名字空间中. eval(), exec,和 execfile()函数也可以接受一个或两个可选字典参数作为代码执行的全局名字空间和局部名字空间. 例如:

1 globals = {'x': 7,

2            'y': 10,

3            'birds': ['Parrot', 'Swallow', 'Albatross']

4           }

5 locals = { }

6

7 # 将上边的字典作为全局和局部名称空间

8 a = eval("3*x + 4*y", globals, locals)

9 exec "for b in birds: print b" in globals, locals   # 注意这里的语法

10 execfile("foo.py", globals, locals)

如果你省略了一个或者两个名称空间参数,那么当前的全局和局部名称空间就被使用.如果一个函数体内嵌嵌套函数或lambda匿名函数时,同时又在函数主体中使用exec或execfile()函数时, 由于牵到嵌套作用域,会引发一个SyntaxError异常.(此段原文:If you omit one or both namespaces, the current values of the global and local namespaces are used. Also,due to issues related to nested scopes, the use of exec or execfile() inside a function body may result in a SyntaxError exception if that function also contains nested function definitions or uses the lambda operator.)

在Python2.4中俺未发现可以引起异常

注意例子中exec语句的用法和eval(), execfile()是不一样的. exec是一个语句(就象print或while), 而eval()和execfile()则是内建函数.

exec(str) 这种形式也被接受,但是它没有返回值。

当一个字符串被exec,eval(),或execfile()执行时,解释器会先将它们编译为字节代码,然后再执行.这个过程比较耗时,所以如果需要对某段代码执行很多次时,最好还是对该代码先进行预编译,这样就不需要每次都编译一遍代码,可以有效提高程序的执行效率。

compile(str ,filename ,kind )函数将一个字符串编译为字节代码, str是将要被编译的字符串, filename是定义该字符串变量的文件,kind参数指定了代码被编译的类型-- 'single'指单个语句, 'exec'指多个语句, 'eval'指一个表达式. cmpile()函数返回一个代码对象,该对象当然也可以被传递给eval()函数和exec语句来执行,例如:

1 str = "for i in range(0,10): print i"

2 c = compile(str,'','exec')      # 编译为字节代码对象

3 exec c                          # 执行

4

5 str2 = "3*x + 4*y"

6 c2 = compile(str2, '', 'eval')  # 编译为表达

posted on 2009-06-04 22:07 周锐 阅读(13199) 评论(0)  编辑  收藏 所属分类: Python

python execfile_python中eval, exec, execfile,和compile [转载]相关推荐

  1. Python中的eval(),exec()以及其相关函数

    1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式 ...

  2. Python中的eval,exec以及其相关函数

    1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式 ...

  3. Python中eval与exec的使用及区别

    最近开发中用到了eval()与exec()这两个函数,不知道在哪种场景下用哪个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数的区别 1.eval函数 函数的作用: 计算指定表达式的 ...

  4. python内置函数 exec eval compile

     1.exec eval compile   ·exec & eval exec和eval都可以执行储存在字符串或文件中的 Python 语句. 用法:exec(object[, global ...

  5. python中eval方法的妙用

    python中eval方法的妙用 python中eval的妙用 python中eval的妙用 对于python中的eval函数,通常就知道是一个计算函数,比如: eval("111" ...

  6. python中eval函数和int函数功能一样_python中eval与int的区别浅析

    python中eval和int的区别是什么?下面给大家介绍一下: 1.eval()函数 eval()能够以Python表达式的方式解析并执行字符串,并将返回结果输出.eval()函数将去掉字符串的两个 ...

  7. 23.Python中的exec函数

    <Python编程的术与道:Python语言进阶>视频课程 <Python编程的术与道:Python语言进阶>视频课程链接:https://edu.csdn.net/cours ...

  8. python中eval()函数的使用

    python中eval()函数的使用 python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果. 函数定义: eval(expression, globals=None, l ...

  9. Python中eval函数的表达式如何使用

    这篇文章主要介绍了Python中eval函数的表达式用法示例,文中通过示例对比来为大家进行详细的讲解,有需要的朋友可以借鉴参下,希望有所帮助 eval 是干嘛的? 解析字符串表达式并执行,并返回一个值 ...

最新文章

  1. PHP 批量生成静态html
  2. BBS中父模块缩进,子模块归属父模块的实现方式
  3. glib访问mysql_Mysql-安装与配置glibc
  4. java多线程必须掌握吗_多线程模式有什么作用(java多线程必须掌握的知识)
  5. Docker 是一个开源的应用容器引擎
  6. 数通手稿留档——Multicast
  7. 沉淀再出发:关于java中的AQS理解
  8. 测试用例的“真相”与“事实” 这9个事实让人扎心!
  9. 百度二年级手工机器人_使用盈首AI炒股机器人,能获得超高超额收益率
  10. Vlan 划分和 VLan间DHCP 分配
  11. 【转载】shell中EOF的用法
  12. oracle-Ora-01779-内联视图更新法
  13. 03_安装和配置 kubectl
  14. Java多用户商城系统B2B2C源码
  15. strcmp函数的实现方式
  16. 网页设计html5留言板代码,网页制作:( 留言板 ), 我想改变留言字体的颜色( 单项选择:红/黄/蓝 )代码改如何编啊?, 十分感谢!...
  17. iPhone删除的照片能恢复吗?苹果手机照片怎么恢复
  18. 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
  19. JupyterLab 的安装与使用
  20. 如何用计算机做音乐,怎么制作音乐-手把手教你用废旧物品DIY音乐道具,超好玩!...

热门文章

  1. PostgreSQL 13隐藏杀手锏特性
  2. Python 可以满足你任何 API 使用需求
  3. 几款Java开发者必备常用的工具,准点下班不在话下
  4. Scrum指南这么改,我看要完蛋!
  5. 疫情当前,企业“逆势而上”还需“上云”加速
  6. 你的企业离DevOps转型成功,就差这“七步法”路线图
  7. 补习系列(21)-SpringBoot初始化之7招式
  8. 对于Python函数与方法,你可能存在些误解
  9. 华为云一站式AI开发平台ModelArts获2019全球智博会金奖
  10. 《JavaScript高级程序设计》红宝书第二遍阅读(动手实践)