设为首页 加入收藏

TOP

Python中的eva l()、exec()及其相关函数
2017-02-08 08:16:33 】 浏览:211
Tags:Python eva exec 及其 相关 函数

刚好前些天有人提到eva l()与exec()这两个函数,所以就翻了下Python的文档。这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals()、locals()和compile():


计算指定表达式的值。也就是说它要执行的Python代码只能是单个运算表达式(注意eva l不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似。


输出结果:


对输出结果的解释:


动态执行Python代码。也就是说exec可以执行复杂的Python代码,而不像eva l函数那么样只能计算一个表达式的值。


exec函数的返回值永远为None.


我们把实例1中的eva l函数换成exec函数试试:


输出结果:


因为我们说过了,exec函数的返回值永远为None。


输出结果:


对输出结果的解释:


前两个输出跟上面解释的eva l函数执行过程一样,不做过多解释。关于最后一个数字34,我们可以看出是:x = 1, y = 3是没有疑问的。关于z为什么还是30而不是4,这其实也很简单,我们只需要在理一下代码执行过程就可以了,其执行过程相当于:


先来看下这两个函数的定义和文档描述


描述: Return a dictionary representing the current global symbol table. This is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called).


翻译: 返回一个表示当前全局标识符表的字典。这永远是当前模块的字典(在一个函数或方法内部,这是指定义该函数或方法的模块,而不是调用该函数或方法的模块)


描述: Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks.


翻译: 更新并返回一个表示当前局部标识符表的字典。自由变量在函数内部被调用时,会被locals()函数返回;自由变量在类累不被调用时,不会被locals()函数返回。


输出结果:


输出结果:


上面打印出的G和L的内存地址是一样的,说明在模块级别locals()的返回值和globals()的返回值是相同的。


将source编译为code对象或AST对象。code对象能够通过exec()函数来执行或者通过eva l()函数进行计算求值。


输出结果:


comiple()函数、globals()函数、locals()函数的返回结果可以当作eva l()函数与exec()函数的参数使用。


另外,我们可以通过判断globals()函数的返回值中是否包含某个key来判断,某个全局变量是否已经存在(被定义)。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python之函数与变量 下一篇Python之装饰器

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目