Python从入门到精通14天(eval、literal_eval、exec函数的使用)
eval、literal_eval、exec函数的使用
- eval函数
- literal_eval函数
- exec函数
- 三者的区别
eval函数
eval()是Python中的内置函数,它可以将一个字符串作为参数,并将该字符串作为Python代码执行。它的语法格式为:eval(expression,globals=None,locals=None)
expression参数:表示要执行的Python代码的字符串表示形式。
globals参数:表示全局变量的字典,当有global参数时,eval函数就执行gobals参数字典键对应的值,它的作用域就限于globals中。
locals参数:表示局部变量的字典,当局部变量中字典的键与全局变量中的字典的键相同时,优先执行locals参数中键对应的值。
在默认的情况下,eval()函数的作用范围为当前作用域的全局和局部变量。
具体代码如下:
# 定义一些使用的数据
na = 1
nb = 2
nc = {"na":3,"nb":1}
nd = {"na":4,"nc":5}'''
测试expression参数
'''
eval1 = eval("na+nb")'''
测试globals参数
'''
# 这里的na和nb必须时字典的键
# 因为你用到了globals参数
eval2 = eval("na+nb",nc)'''
测试locals参数
'''
# 这里globals参数中字典的键和locals参数中字典的键相同
# 此时eval函数会优先使用locals中字典对应键的值
eval3 = eval("na+nc",nc,nd)print(eval1) # 3
print(eval2) # 4
print(eval3) # 9
我们常用的是eval函数和input函数的结合,input函数获取输入的值,并以字符串的形式进行返回。而这时我们的eval函数刚好能进行字符串的转换。具体代码如下:
ina = input("请输入一个整数:")
print(type(ina)) # <class 'str'>inb = eval(ina)
print(type(inb)) # <class 'int'>
eval函数的使用具有不安全性,它的可以执行任意的Python代码,包括恶意代码,如果函数参数是不可信的来源提供的,那么可能导致安全漏洞。例如:如果提供一个恶意的字符串”__import__('OS').system('rm -rf/')“,如果执行了此代码,那么会导致系统文件被删除,造成不可挽回的损失。所以在不可信的环境中我们应该避免使用eval函数,可以考虑更加安全的函数:literal_eval()函数
literal_eval函数
literal_eval()函数可以安全的评估包含字面表达式的字符串,因此不能用于解析任意的Python代码。它不会执行任何函数或导入模块,因此可以避免由于不可信代码的执行而导致的安全漏洞。literal_eval()函数使用时需要导入ast库它的语法格式为:ast.literal_eval(node_or_string)
node_or_string参数:表示包含要评估代码的字符或者编译过的代码对象。
具体代码如下:
import asts = "[2, 3, 4, 5]"# 它的字面表达式为列表
result = ast.literal_eval(s)print(result) # [2, 3, 4, 5]
exec函数
exec函数用于执行一段动态生成的代码。它接收一个字符串作为参数,字符中包含了要执行的Python代码。exec函数可以被用于动态的导入模块、定义函数、类等操作,也具有不安全性。语法格式为:exec(object, globals=None, locals=None)
object参数:表示要执行的代码的字符串或和编译过的代码对象。
globals参数:表示全局变量的字典
locals参数:表示局部变量的字典
他的使用方法和eval函数有点相似,并且默认情况下使用当前作用域的全局和局部变量。
具体代码如下:
# 打印3 3次
code = '''
for _ in range(3):print("3")
'''
exec(code)
三者的区别
安全性:exec()和eval()函数都不具备安全性,在不可信的环境下避免使用。而literal_eval()函数具备安全性。
执行范围:exec()和eval()可以执行任意Python代码,而literal_eval()函数只能执行包括字符串、数字、元组、列表和字典等在内的字面表达式,不能执行任意Python代码(如函数和模块不能执行)。
相关文章:
Python从入门到精通14天(eval、literal_eval、exec函数的使用)
eval、literal_eval、exec函数的使用 eval函数literal_eval函数exec函数三者的区别 eval函数 eval()是Python中的内置函数,它可以将一个字符串作为参数,并将该字符串作为Python代码执行。它的语法格式为:eval(expression,globalsNone,locals…...
队列的基本操作(C语言链表实现)初始化,入队,出队,销毁,读取数据
文章目录 前言一、队列基本变量的了解二、队列的基本操作2.1队列的初始化(QueueInit)2.2入队(QueuePush)2.3判断是否为空队(QueueEmpty)2.4出队(QueuePop)2.5队列的队头数据…...
项目支付接入支付宝【沙箱环境】
前言 订单支付接入支付宝,使用支付宝提供的沙箱机制模拟为订单付款。我这里主要记录一下沙箱环境如何接入到系统中,具体细节的实现。按照官方文档来就可以了。 1、使用步骤 这里有几个重要数据要拿到,一个是支付宝的公钥和私钥,…...
程序员应该如何提升自己
作为一名程序员,以下是您可以考虑的一些方法来提高自己的技能和知识: 深入学习编程语言和相关工具:了解您使用的编程语言和相关工具的基本原理和高级特性,以便更好地理解其工作方式并更有效地使用它们。 刻意练习:刻意…...
全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成
ABB是数字行业的技术前沿者,拥有四项主营业务:电气化,工业自动化,运动控制以及机器人和离散自动化。ABB总部位于瑞士苏黎世,业务遍及100多个国家,拥有约105,000名员工。2021年,该公司…...
手写简易 Spring(三)
文章目录 三. 手写简易 Spring(三)1. Bean 对象初始化和销毁方法1. XML 添加 init-method 与实现 InitializingBean 接口注册初始化2. XML 添加 destroy-method 与实现 DisposableBean 接口注册销毁3. DefaultSingletonBeanRegistry 优秀的解耦方法 2. 定…...
设计模式-看懂UML类图和时序图
这里不会将UML的各种元素都提到,只讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,应该能将类图所表达的含义和最终的代码对应起来; 1…...
2023年全国最新安全员精选真题及答案57
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 101.(单选题)遇有()及以上强风、浓雾等…...
数字图像处理基础
图像增强:不论方法,只要能够得到较好的图像即可 图像复原:找到图像退化的原因,把噪声过滤得到较好的图像 RGB——HSI(色调 饱和度 亮度)彩色图像处理需要用到灰度图像处理 直方图均衡,灰度概率密度函数接近均匀分布&a…...
onnx手动操作
使用onnx.helper可以进行onnx的制造组装操作: 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…...
虚拟机安装Centos7,ping不通百度
虚拟机安装Centos7,ping不通百度 一、虚拟机网络配置 网络适配器选择桥接模式,不勾选复制物理网络连接状态。 同时虚拟机使用默认配置都是桥接。 二、配置静态IP 1、首先,查看宿主机的IP和网关 2、配置静态ip的文件地址及修改命令如下&…...
leetCode算法第一天
今天开始刷算法题,提升自己的算法思维和代码能力,加油! 文章目录 无重复字符的最长子串最长回文子串N形变换字符串转换整数 无重复字符的最长子串 leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characte…...
怎么将太大的word文档压缩变小,3个高效方法
怎么将太大的word文档压缩变小?word文档是我们在办公中使用较多的文件格式之一,相信小伙伴们会遇到这样的问题,编辑完成word文档之后发现,编辑完的文档体积太大了,无论是发送给客户还是上传到邮箱中都不方便࿰…...
mvc+动态代理
不使用MVC的时候系统存在的缺陷 一个Servlet都负责了那些工作? 负责了接收数据负责了核心的业务处理负责了数据表中的CRUD负责了页面的数据展示… 分析银行转账项目存在那些问题? 代码的复用性太差。(代码的重用性太差) 因为没…...
vue-cli(vue脚手架方式搭建)
1.首先安装node前端环境,可以帮助我们去下载其他的组件 下载完成后,去自己的电脑找到node的文件路径,复制去配置环境变量,在path中配 环境搭配完成后,在cmd中进行测试 ,输入一下两个命令进行测试 2.在hbuilderX中创建一个vue-cli项目(标准的前段项目) 3.组件路由 (1)安装 v…...
CentOS 安装 Docker
文章目录 一、更新yum源二、查看docker是否曾经安装过三、安装所需要的软件包四、设置yum源(也可以设置成国内的阿里源等)五、查看docker版本六、.安装docker (默认全部选y)七、查看docker安装版本八、docker 启动/停止/重启/开机…...
别搞了 软件测试真卷不动了...
内卷可以说是 2022年最火的一个词了。2023 年刚开始,在很多网站看到很多 软件测试的 2022 年度总结都是:软件测试 越来越卷了(手动狗头),2022 年是被卷的一年。前有几百万毕业生虎视眈眈,后有在职人员带头“…...
OJ刷题 第十二篇
21308 - 特殊的三角形 时间限制 : 1 秒 内存限制 : 128 MB 有这样一种特殊的N阶的三角形,当N等于3和4时,矩阵如下: 请输出当为N时的三角形。 输入 输入有多组数据,每行输入一个正整数N,1<N<100 输出 按照给出…...
【计算机专业应届生先找培训还是先找个工作过渡一下?】
计算机专业应届生先找培训还是先找个工作过渡一下? 计算机应届生是先培训还是先工作,这个问题应该困扰了很多专业技能一般的同学,尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂,技术一般学历优秀的人能…...
MySQL数据库,联合查询
目录 1. 联合查询 1.1 内查询 1.2 外查询 1.3 自连接 1.4 子查询 1.5 合并查询 1. 联合查询 联合查询,简单的来讲就是多个表联合起来进行查询。这样的查询在我们实际的开发中会用到很多,因此会用笛卡尔积的概念。 啥是笛卡尔积?两张表…...
AI驱动命令行工具:用自然语言生成Shell命令,提升开发运维效率
1. 项目概述:一个能“读懂”你意图的智能命令行工具如果你和我一样,每天有大量时间泡在终端里,那么对命令行工具的效率追求几乎是永无止境的。敲命令、查参数、记路径、处理错误……这些琐碎的操作虽然基础,却实实在在地消耗着我们…...
数据模型代码生成器:从OpenAPI/Schema自动生成Python类型安全模型
1. 项目概述:当数据模型遇上代码生成如果你经常和数据模型打交道,无论是OpenAPI规范、JSON Schema,还是数据库的DDL,那你一定体会过手动编写对应数据类(Data Class)或Pydantic模型的繁琐。一个字段类型写错…...
一个产业带还值不值得押注?用 4 个生命周期阶段,对照 4 类可观察指标自己判断
你是卖设备、卖材料、卖工业服务的上游销售员。摆在你面前的是一张产业带地图:古镇灯饰、晋江运动鞋、戴南不锈钢、盛泽化纤、安平丝网……每一个都聚着成千上万家工厂。 问题来了:要在哪个产业带投入你的差旅、样品、地推团队?押错地方&…...
别再让电机乱转了!手把手教你用STM32的TIM3和L298N实现精准PWM调速(附完整工程源码)
STM32与L298N电机控制实战:从原理到精准调速的完整指南 在智能小车、机械臂或自动化设备开发中,直流电机控制是最基础却最容易出问题的环节。很多初学者在第一次连接STM32和L298N驱动模块时,都会遇到电机不转、乱转或速度不稳的情况。本文将彻…...
从DFT计算到论文插图:一条龙搞定Pt(111)表面吸附模型的构建与可视化
从DFT计算到论文插图:Pt(111)表面吸附模型的完整构建与可视化指南 在计算材料科学领域,构建精确的表面吸附模型是研究催化反应机理、表面化学过程的第一步。对于刚入门的研究者来说,如何快速构建一个符合物理实际的Pt(111)表面吸附模型&#…...
ROFL-Player:英雄联盟回放时光机,一键穿越所有版本
ROFL-Player:英雄联盟回放时光机,一键穿越所有版本 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联…...
英雄联盟终极自动化工具:LeagueAkari 免费完整指南,告别繁琐操作
英雄联盟终极自动化工具:LeagueAkari 免费完整指南,告别繁琐操作 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否…...
解锁Midjourney V6针孔相机效果:从模糊边缘到胶片噪点,7步零代码复刻1950年代Lomography美学
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6针孔相机美学的视觉基因解码 针孔相机(Pinhole Camera)作为一种无镜头、仅靠小孔成像的原始光学装置,其模糊边缘、高对比暗角、中心锐度衰减与天然晕影…...
系统安装:安装Ubuntu 26.04 LTS
1. EFI以及UEFI,什么用途? https://baike.baidu.com/item/EFI/2025809 EFI(Extensible Firmware Interface,可扩展固件接口)是由英特尔公司开发的固件接口标准,用于替代传统BIOS以实现更高效的硬件初始化和…...
如何用GenshinPlayerQuery深度分析原神账号:3个维度掌握角色成长与战斗表现
如何用GenshinPlayerQuery深度分析原神账号:3个维度掌握角色成长与战斗表现 【免费下载链接】GenshinPlayerQuery 根据原神uid查询玩家信息(基础数据、角色&装备、深境螺旋战绩等) 项目地址: https://gitcode.com/gh_mirrors/ge/GenshinPlayerQuery 你是…...
