广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Pythoneval()与exec()函数使用介绍
  • 456
分享到

Pythoneval()与exec()函数使用介绍

Pythoneval函数Pythonexec函数 2023-01-29 12:01:33 456人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录eval()和exec()的用法exec()和eval()的区别eval() 和 exec() 函数的应用场景eval() 和 exec() 函数都属于 python 的内置函数

eval() 和 exec() 函数都属于 python 的内置函数,由于这两个函数在功能和用法方面都有相似之处,所以将它们放到一节进行介绍。

eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提供),相当于一个 Python 的解释器。二者不同之处在于,eval() 执行完要返回结果,而 exec() 执行完不返回结果(文章后续会给出详细示例)。

eval()和exec()的用法

eval() 函数的语法格式为:

eval(expression, globals=None, locals=None, /)

而 exec() 函数的语法格式如下:

exec(expression, globals=None, locals=None, /)

可以看到,二者的语法格式除了函数名,其他都相同,其中各个参数的具体含义如下:

  • expression:这个参数是一个字符串,代表要执行的语句 。该语句受后面两个字典类型参数 globals 和 locals 的限制,只有在 globals 字典和 locals 字典作用域内的函数和变量才能被执行。
  • globals:这个参数管控的是一个全局的命名空间,即 expression 可以使用全局命名空间中的函数。如果只是提供了 globals 参数,而没有提供自定义的 __builtins__,则系统会将当前环境中的 __builtins__ 复制到自己提供的 globals 中,然后才会进行计算;如果连 globals 这个参数都没有被提供,则使用 Python 的全局命名空间。
  • locals:这个参数管控的是一个局部的命名空间,和 globals 类似,当它和 globals 中有重复或冲突时,以 locals 的为准。如果 locals 没有被提供,则默认为 globals。

注意,__builtins__ 是 Python 的内建模块,平时使用的 int、str、abs 都在这个模块中。通过 print(dic["__builtins__"]) 语句可以查看 __builtins__ 所对应的 value。

首先,通过如下的例子来演示参数 globals 作用域的作用,注意观察它是何时将 __builtins__ 复制 globals 字典中去的:

dic={}#定义一个字典
dic['b']=3#在 dic 中加一条元素,key 为 b
print(dic.keys())#先将 dic 的 key 打印出来,有一个元素 b
exec("a = 4", dic)#在 exec 执行的语句后面跟一个作用域 dic
print(dic.keys())#exec 后,dic 的 key 多了一个

运行结果为:

dict_keys(['b'])
dict_keys(['b', '__builtins__', 'a'])

上面的代码是在作用域 dic 下执行了一句 a = 4 的代码。可以看出,exec() 之前 dic 中的 key 只有一个 b。执行完 exec() 之后,系统在 dic 中生成了两个新的 key,分别是 a 和 __builtins__。其中,a 为执行语句生成的变量,系统将其放到指定的作用域字典里;__builtins__ 是系统加入的内置 key。

locals参数的用法就很简单了,举个例子:

a=10
b=20
c=30
g={'a':6,'b':8}#定义一个字典
t={'b':100,'c':10}#定义一个字典
print(eval('a+b+c', g, t))#定义一个字典 116

输出结果为:

116

exec()和eval()的区别

前面已经讲过,它们的区别在于,eval() 执行完会返回结果,而 exec() 执行完不返回结果。举个例子:

a =1
exec("a = 2")#相当于直接执行 a=2
print(a)
a =exec("2+3")#相当于直接执行 2+3,但是并没有返回值,a 应为 None
print(a)
a =eval('2+3')#执行 2+3,并把结果返回给 a
print(a)

运行结果为:

2

None

5

可以看出,exec() 中最适合放置运行后没有结果的语句,而 eval() 中适合放置有结果返回的语句。

如果 eval() 里放置一个没有结果返回的语句会怎样呢?例如下面代码:

a=eval("a = 2")

这时 Python 解释器会报 SyntaxError 错误,提示 eval() 中不识别等号语法。

eval() 和 exec() 函数的应用场景

在使用 Python 开发服务端程序时,这两个函数应用得非常广泛。例如,客户端向服务端发送一段字符串代码,服务端无需关心具体的内容,直接跳过 eval() 或 exec() 来执行,这样的设计会使服务端与客户端的耦合度更低,系统更易扩展。

另外,如果读者以后接触 Tensorflow 框架,就会发现该框架中的静态图就是类似这个原理实现的:

  • TensorFlow 中先将张量定义在一个静态图里,这就相当将键值对添加到字典里一样;
  • TensorFlow 中通过 session 和张量的 eval() 函数来进行具体值的运算,就当于使用 eval() 函数进行具体值的运算一样。

需要注意的是,在使用 eval() 或是 exec() 来处理请求代码时,函数 eval() 和 exec() 常常会被黑客利用,成为可以执行系统级命令的入口点,进而来攻击网站。解决方法是:通过设置其命名空间里的可执行函数,来限制 eval() 和 exec() 的执行范围。

到此这篇关于Python eval()与exec()函数使用介绍的文章就介绍到这了,更多相关Python eval()与exec()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Pythoneval()与exec()函数使用介绍

本文链接: https://www.lsjlt.com/news/178575.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Pythoneval()与exec()函数使用介绍
    目录eval()和exec()的用法exec()和eval()的区别eval() 和 exec() 函数的应用场景eval() 和 exec() 函数都属于 Python 的内置函数...
    99+
    2023-01-29
    Python eval函数 Python exec函数
  • Python函数介绍:exec函数的介绍及示例
    Python函数介绍:exec函数的介绍及示例引言:在Python中,exec是一种内置函数,它用于执行存储在字符串或文件中的Python代码。exec函数提供了一种动态执行代码的方式,使得程序可以在运行时根据需要生成、修改和执行代码。本文...
    99+
    2023-11-03
    示例 介绍 exec函数
  • pythoneval()函数使用详情
    目录一、eval()函数是什么?二、eval()函数语法解析三、eval()函数应用举例3.1 eval()基本应用举例3.2 eval()危害举例3.3 ast.literal_e...
    99+
    2022-11-12
  • python中sample函数的介绍与使用
    目录1 sample(序列a,n)2 random sample()补充:Pandas-sample随机抽样实例总结1 sample(序列a,n) sample(序列a,n) 功能:...
    99+
    2022-11-11
  • Python嵌套函数与nonlocal使用详细介绍
    目录嵌套函数嵌套函数中变量的范围nonlocal使用nonlocal的优点缺点举例多层嵌套中的nonlocal嵌套函数中局部变量的重用理解闭包之前,我们首先需要理解什么是嵌套函数(n...
    99+
    2022-11-11
  • 【MySQL基础教程】函数的介绍与使用
    前言 本文为 【MySQL基础教程】函数的介绍与使用 相关知识,下边具体将对字符串函数,数值函数,日期函数,流程函数等进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Java全栈学习路线可参考:【Java...
    99+
    2023-08-18
    mysql 数据库 java
  • Oracle case函数使用介绍
    1.创建测试表: 复制代码 代码如下:DROP SEQUENCE student_sequence;CREATE SEQUENCE student_sequence ...
    99+
    2022-11-15
    Oracle case
  • C++BoostEnableIf函数使用介绍
    目录一、说明二、Boost.EnableIf的示例练习一、说明 Boost.EnableIf Boost.Enable If 可以禁用重载函数模板或专用类模板。禁用意味着编译器忽略相...
    99+
    2022-11-21
    C++ Boost EnableIf C++ EnableIf函数
  • Python的函数使用介绍
    目录1 跳出循环-break2 python函数2.1 内置函数2.2 自定义函数2.3 main函数1 跳出循环-break python提供了一种方便快捷的跳出循环的方法-bre...
    99+
    2022-11-12
  • Python函数之zip函数的介绍与实际应用
    目录1. zip() 函数的介绍1.1 功能1.2 语法2. zip() 函数的应用2.1 用 zip() 函数实现列表合并2.2 使用 zip() 函数建立字典2.3 zip() ...
    99+
    2022-11-13
  • Python函数对象与闭包介绍
    目录一 函数对象1.1 函数可以被引用1.2 函数可以作为容器类型的元素1.3 函数可以作为参数传入另外一个函数1.4 函数的返回值可以是一个函数二 闭包函数2.1 闭与包2.2 闭...
    99+
    2022-11-10
  • Kotlin匿名函数使用介绍
    目录1.函数的声明2.函数参数3.Unit函数4.匿名函数5.匿名函数的参数6.lambda表达式7.定义参数8.匿名函数9.函数的引用10.函数类型作为返回类型1.函数的声明 ko...
    99+
    2022-11-13
  • SQL中ISNULL函数使用介绍
     SQL Server中的isnull()函数: isnull(value1,value2) 1、value1与value2的数据类型必须一致。 2、如果value...
    99+
    2022-11-12
  • C++构建函数使用介绍
    构造函数概念: 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次(创建对象) 作...
    99+
    2022-11-13
  • length函数用法介绍
    length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此...
    99+
    2023-10-22
    length length()函数
  • MySQL常用函数介绍
    前言:  MySQL数据库中提供了很丰富的函数,比如我们常用的聚合函数,日期及字符串处理函数等。SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQ...
    99+
    2022-10-18
  • CSS常用函数介绍
    本篇内容介绍了“CSS常用函数介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 简介CSS 包...
    99+
    2022-10-19
  • go语言中函数与方法介绍
    在C#或者Java里面我们都知道,一个Class是要包含成员变量和方法的,对于GO语言的Struct也一样,我们也可以给Struct定义一系列方法。 一、怎么定义一个方法? Go的方...
    99+
    2022-11-13
  • Mysql聚合函数的使用介绍
    目录前言什么是聚合函数SUM 函数countmax与minsumavg总结前言 聚合函数用来对表中的数据进行统计和计算。users表结构如下: 什么是聚合函数 聚合函数是用来做简单的数据统计的,比如说统计一下 &ldq...
    99+
    2022-10-14
  • Python Get()函数用法介绍
    一、简介 Python是一种高级编程语言,它具有简单、易学、高效等特点。而Python get()函数是其中一个重要的函数。该函数用于返回指定键的值,如果键不存在,则返回默认值None。 下面将从各个方面对Python get()函数做详细...
    99+
    2023-10-23
    python 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作