python之eval函数使用详解

         eval() 是 Python 内置的一个函数,它可以将字符串最外侧的引号去掉,并且按照python语句方式执行去掉引号后的代码(去掉引号后,代码可能还是字符串,可能是数字,可能是列表,可能是执行函数的代码块等等), ---用于执行字符串表达式。

1. eval() 函数的语法

        eval() 函数的语法如下:

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

                参数:                

                        expression 是一个字符串,表示要求值的表达式或代码。

                        globals 是一个可选的全局命名空间字典。

                        locals 是一个可选的局部命名空间字典。

1.1 默认参数使用 

1.1.1 求值表达式

data = "2 + 3"
print(type(data))  # "str"
result = eval(data)
print(type(result)) # int
print(result)  # 输出:5

         上述示例中,将字符串 "2 + 3" 作为表达式传递给 eval() 函数,去掉引号后,执行2+3 ,是int类型相加,所以结果是5。 

data = "'2' + '3'"
print(type(data))  # "str"
result = eval(data)
print(type(result)) # "str"
print(result)  # 输出:23

        上述示例中,将字符串 "'2' + '3'"  作为表达式传递给 eval() 函数,去掉引号后,执行'2' + '3' ,是str类型相加,所以结果是23。 

1.1.2 字符串转化为数据类型

num = eval("42")
print(type(num))  # 输出: <class 'int'>string = eval("'Hello, World!'")
print(type(string))  # 输出: <class 'str'>

        上述示例中,使用 eval() 将字符串转换为对应的数据类型,例如将字符串 "42" 转换为整数,将字符串 "'Hello, World!'" 转换为字符串。 

 1.1.3 执行代码块

age = "random.randint(0, 9)"
result = eval(age)
print(age)  # random.randint(0, 9)
print(result) # 9(或者0到9范伟内的数字)
def fun():age = random.randint(0,9)print(age)eval("fun()")  # 5 (或者0到9的数字)

        上述示例中,将代码块作为字符串传递给 eval() 函数,然后在给定的上下文中执行这段代码,打印age的值。

1.2  默认参数globals 和 locals 的使用 

        eval() 函数中的 globals 和 locals 参数用于指定代码执行时的全局和局部命名空间。这些参数允许你在 eval() 中使用特定的变量和函数。 

1.2.1 使用全局命名空间 

x = 5
result = eval("x + 2", globals())
print(result)  # 输出:7

        上述示例中,我们使用 globals() 函数将当前的全局命名空间传递给 eval()。这样,eval() 中的代码可以访问全局变量 x。

 1.2.2 使用局部命名空间

def add(a, b):return a + blocals_dict = {'a': 2, 'b': 3}
result = eval("add(a, b)", globals(), locals_dict)
print(result)  # 输出:5

         在这个例子中,我们使用 locals_dict 字典作为局部命名空间传递给 eval()。这样,eval() 中的代码可以访问局部变量 a 和 b,以及 add() 函数。

1.2.3 修改局部命名空间

x = 2
locals_dict = {'x': 5}
eval("x = x + 1", globals(), locals_dict)
print(locals_dict['x'])  # 输出:6

          示例中,我们将 locals_dict 字典作为局部命名空间传递给 eval()。eval() 中的代码将修改局部变量 x 的值。通过在 eval() 之后检查 locals_dict['x'],我们可以看到变量 x 的值已经被修改为 6。

2. 异常处理

        如果在 eval() 中的表达式或代码中存在语法错误或运行时错误,eval() 将引发相应的异常。因此,在使用 eval() 时,应该使用适当的异常处理机制来捕获和处理可能出现的异常。

3. eval() 的替代方法


        在某些情况下,可以考虑使用更安全和受控制的替代方法来执行特定的任务。例如,如果需要执行简单的数学运算,可以使用 eval() 的更安全的替代方法 ast.literal_eval()。如果需要执行特定的函数调用,可以使用 getattr() 函数来获取对象的属性或方法,并进行调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10手动安装stable-diffusion-webui

目录 1.python下载安装 2.git下载安装 3.stable-diffusion-webui下载 4.安装s-d-webui的依赖包&#xff08;用国内镜像提速&#xff09; 5.git下载的stable-diffusion-webui&#xff0c;依赖包提示已安装&#xff0c;但运行webui-user.bat后&#xff0c;又开始下载 6.修…

RedTail 僵尸网络积极利用新漏洞发起攻击

自从 Palo Alto 的 PAN-OS 漏洞公开披露以来&#xff0c;研究人员发现已有攻击者将该漏洞纳入武器库中。 CVE-2024-3400 2024 年 4 月 11 日&#xff0c;Palo Alto 发布公告称基于 PAN-OS 的产品中存在的 0day 漏洞已经被攻击者利用&#xff0c;安全公司 Volexity 已经发现了…

配置 python 脚本操作Excel 环境

在已装python的前提下 一、安装依赖库 pip install pandas pip install openpyxl安装完后&#xff0c;可以在 Python 中运行以下命令来查看 pandas 或 openpyxl 的安装路径&#xff1a; import pandas as pd print(pd.__path__)import openpyxl print(openpyxl.__path__)二、测…

LearnOpenGL - Android OpenGL ES 3.0 绘制纹理

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 与 VBO 之间的关系LearnOpenGL - Android OpenGL ES 3.0 绘制…

【C/C++】实现高性能日志轮转功能,已实测

基本实现 在C语言中实现日志文件轮转功能&#xff0c;你需要手动编写代码来处理文件的重命名、压缩和删除。下面是一个简单的C语言程序示例&#xff0c;它演示了如何实现基本的日志文件轮转功能。这个程序会检查日志文件的大小&#xff0c;如果超过预设的大小限制&#xff0c;…

光纤中的数值 2.405 是怎么一回事?

在光纤通信中,光线的传播依赖于纤芯和包层之间的折射率差异。 即,当光线从纤芯入射到界面上时,如果入射角大于临界角 θ0,将发生全反射,没有光能量透射至包层而泄漏出去,此即光纤导光原理。 反映到光纤的端面,在光纤端面的光线,当入射角必须小于光纤的孔径角 α0 ,此时…

高效管理:好用的项目管理工具推荐

在当今快速变化的商业环境中&#xff0c;高效的项目管理工具能够显著提升团队的生产力和项目的成功率&#xff0c;还能有效地跟踪项目进度。所以&#xff0c;一款优秀的项目管理工具首先要具备先进的项目管理理念&#xff0c;支持多种研发管理和项目管理方法论&#xff0c;才能…

名称申请不了商标,可以受保护不!

前几天个网友说要申请注册个商标名称&#xff0c;发来名称让普推商标知产老杨帮忙检索了下&#xff0c;发现有同名的被驳回&#xff0c;而且是做过驳回复审被驳回&#xff0c;而且是绝对理由驳回的&#xff0c;易使消费者对商品的品质等特点产生误认&#xff0c;不得作为商标使…

【工具】全国省市县SQL脚本(MySQL)

目录 省份建表插入数据 城市建表插入数据 测试 省份 建表 CREATE TABLE province (id int(11) NOT NULL,create_time datetime(0) NOT NULL COMMENT 创建时间,update_time datetime(0) NULL DEFAULT NULL COMMENT 修改时间,valid char(1) CHARACTER SET utf8 COLLATE utf8_ge…

IntelliJ IDEA 2024 mac/win版:编程利器,智慧之选

IntelliJ IDEA 2024是一款由JetBrains精心打造的集成开发环境(IDE)&#xff0c;专为Java等编程语言量身打造&#xff0c;同时支持多种其他语言&#xff0c;为开发者提供了卓越的开发体验。 IntelliJ IDEA 2024 mac/win版获取 这款IDE凭借其出色的智能化和高效性&#xff0c;赢…

红军九大技战法

一、动态对抗&#xff0c;线上社工持续信息追踪 发起攻击前&#xff0c;发起攻击前&#xff0c;尽可能多的搜集攻击目标信息&#xff0c;做到知己知彼&#xff0c;直击目标最脆弱的地方。攻击者搜集关于目标组织的人员信息、组织架构、网络资产、技术框架及安全措施信息&#x…

Python自动化(3)——鼠标模拟

Python自动化(3)——鼠标模拟 前台鼠标模拟 鼠标模拟和键盘模拟类似&#xff0c;也是分前台和后台模拟。话不多说直接&#xff0c;上代码&#xff1a; import time import win32api import win32con import win32gui from ctypes import *MOUSEEVENTF_LEFTDOWN 0x2 MOUSEEV…

java基于ssm+jsp 高校四六级报名管理系统

1前台首页功能模块 高校四六级报名管理系统&#xff0c;在系统首页可以查看首页、四六级报名、新闻资讯、我的、跳转到后台、在线客服等内容&#xff0c;如图1所示。 图1系统功能界面图 学生登录、学生注册&#xff0c;在注册页面可以填写学号、密码、姓名、学院、班级、手机、…

决策树算法详细介绍原理和实现

决策树是一种常用的分类算法&#xff0c;它通过一系列的问题将数据分割成不同的分支&#xff0c;最终确定数据属于哪个类别。下面是决策树的原理、实现方式以及一个案例实现的详细介绍。 决策树原理 特征选择&#xff1a;决策树的构建过程首先需要选择一个特征作为节点&#…

hostname: Name or service not known

rootuser-PC:~# hostname -i hostname: Name or service not known rootuser-PC:~# vi /etc/hosts 10.170.200.148 node148 ## 设置hostname rootuser-PC:~# hostnamectl --static set-hostname node148 ## 再执行的hostname的时候就不会报错了. rootuser-PC:~# hostname…

yolov8中配置文件args.yaml解读

task: 指定任务类型&#xff0c;这里是 detect&#xff0c;表示进行目标检测任务。mode: 指定模式&#xff0c;train 表示训练模式。model: 模型权重文件的路径&#xff0c;这里是预训练模型权重的路径。data: 数据集配置文件的路径&#xff0c;指定了训练和验证数据的位置和格…

现货黄金应用价格行为交易所需要的环境

在现货黄金投资中&#xff0c;投资者常用价格行为交易法来分析走势。简单来说&#xff0c;这种方法就是只看K线和支撑阻力位&#xff0c;顶多加一些简单的指标&#xff0c;以此构建分析和交易的系统。由于价格行为简单易学&#xff0c;现在的投资者或多或少都在使用这个方法。但…

短视频批量下载工具源码逻辑解析(软件)

短视频批量提取第三篇关于视频提取下载的思路 一&#xff1a;概述 因为上一篇不完整&#xff0c;这里其实就是补充第二篇关于源码思路。这里不针对视频评论的提取&#xff0c;只对视频分享链接批量导入下载进行思路解析 二&#xff1a;难点 通常情况下如果直接访问详情页进行…

【稀疏三维重建】Flash3D:单张图像重建场景的GaussianSplitting

项目主页&#xff1a;https://www.robots.ox.ac.uk/~vgg/research/flash3d/ 来源&#xff1a;牛津、澳大利亚国立 提示&#xff1a; 文章目录 摘要1.引言2.相关工作3.方法3.1 背景&#xff1a;从单个图像中重建场景3.2 单目 4.实验4.14.2 跨域新视角合成4.3 域内新视图合成4.4…

学懂C#编程:常用高级技术——委托(Delegate)应用场景——秒懂 多播委托

多播委托&#xff1a;一个委托可以引用多个方法&#xff0c;形成多播委托&#xff0c;调用时所有方法都会执行。 在C#中&#xff0c;委托支持多播&#xff0c;这意味着一个委托实例可以绑定多个方法。当这样的委托被调用时&#xff0c;所有绑定的方法会按照它们添加到委托的顺序…