python中eval函数作用「建议收藏」

python中eval函数作用「建议收藏」eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。eval函数就是实现list、dict、tuple与str之间的转化,str函数把list,dict,tuple转为为字符串一、字符串转换成列表a=”[[1,2],[3,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。

eval函数就是实现list、dict、tuple与str之间的转化,str函数把list,dict,tuple转为为字符串

一、字符串转换成列表

a = “[[1,2], [3,4], [5,6], [7,8], [9,0]]”
print(type(a))
b = eval(a)
print(type(b))
print(b)

二、字符串转换成字典

a = “{1: ‘a’, 2: ‘b’}”
print(type(a))
b = eval(a)
print(type(b))
print(b)

三、字符串转换成元组

a = “([1,2], [3,4], [5,6], [7,8], (9,0))”
print(type(a))
b=eval(a)
print(type(b))
print(b)

python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。
1、强大之处

举几个例子感受一下,字符串与list、tuple、dict的转化。

a = “[[1,2], [3,4], [5,6], [7,8], [9,0]]”
b = eval(a)
b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
Out[4]: list
a = “{1: ‘a’, 2: ‘b’}”
b = eval(a)
b
Out[7]: {1: ‘a’, 2: ‘b’}
type(b)
Out[8]: dict
a = “([1,2], [3,4], [5,6], [7,8], (9,0))”
b = eval(a)
b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))

强大吧,给个字符串给eval,eval给你一个表达式返回值。

eval的语法格式如下:

eval(expression[, globals[, locals]])

expression : 字符串
globals : 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals : 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

结合globals和locals看看几个例子
传递globals参数值为{“age”:1822},

eval(“{‘name’:’linux’,’age’:age}”,{“age”:1822})

输出结果:{‘name’: ‘linux’, ‘age’: 1822}

再加上locals变量

age=18
eval(“{‘name’:’linux’,’age’:age}”,{“age”:1822},locals())

根据上面两个例子可以看到当locals参数为空,globals参数不为空时,查找globals参数中是否存在变量,并计算。

当两个参数都不为空时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。
2、危险之处

eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。
假设用户恶意输入。比如:

eval(“__import__(‘os’).system(‘ls /Users/chunming.liu/Downloads/’)”)

那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了

os.system(‘ls /Users/chunming.liu/Downloads/’)

那么继续输入:

eval(“__import__(‘os’).system(‘cat /Users/chunming.liu/Downloads/tls_asimov_cert.pem’)”)

代码都给人看了。
再来一条删除命令,文件消失。比如

eval(“__import__(‘os’).system(‘rm /Users/chunming.liu/Downloads/车辆转发测试.png’)”)

所以使用eval,一方面享受他的了灵活性同时,也要注意安全性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234094.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 空间尺度分析_特征尺度的选取原则

    空间尺度分析_特征尺度的选取原则特征点尺度变换高斯核是唯一可以产生多尺度空间的核,高斯模板具有圆对称性,通过高斯卷积操作对原始像素值重新分配权重,距离中心越远的相邻像素值权重分配相对较小。二维矩阵变换的高斯平滑操作可以通过在水平和竖直方向上分别进行一维高斯矩阵变换相加得到。尺度是自然客观存在的,不是主观创造的,高斯卷积只是表现尺度空间的一种形式。示例代码如下:voidCreateScaleSpace(cv::M…

    2022年10月14日
  • 工业相机:传感器尺寸与像元尺寸的关系

    工业相机:传感器尺寸与像元尺寸的关系相同分辨率的工业相机,传感器面积越大,则其单位像素的面积也越大,成像质量也会越好。同样的500万像素的工业相机,2/3”的传感器成像质量就要优于1/2”的。一般来说,工业相机的靶面大小,如果要求不是太严格,可以直接按照公式计算。通常,像工业相机厂家会告诉你多少寸的传感器,那么就可以直接使用16mm*X”的传感器得到工业相机的图像传感器的靶面对角线长度。**工业相机使用16mm代表1寸,而不是使用25

  • pycharm中安装django_pycharm环境配置教程

    pycharm中安装django_pycharm环境配置教程原文转载自:http://www.cnblogs.com/hwtmhj/p/6746151.html本人在安装Django的时候,试了很多安装教程均出错,选在这篇博文的的方法二(pycharm中利用其强大的类库进行安装)没有出错!近期做那个python的开发,今天就来简单的写一下开发路线的安装及配置,开发路线Python3.6.1+Pycharm5.0.6+Django1.11+

  • jsonpath表达式_postman中raw

    jsonpath表达式_postman中rawform-data:就是multipart/form-data,将表单内要上传的数据,处理为一条消息,以标签为单元,一个个的隔开。既可以上传键值对,也可以上传文件。multipart/form-data与x-www-form-urlencoded区别就是,multipart/form-data还可以上传文件等二

  • 各种门平面图画法_cad门的画法_用CAD画门的平面图的方法步骤图

    各种门平面图画法_cad门的画法_用CAD画门的平面图的方法步骤图大家在CAD室内平面图中经常看到门吧,那么大家知道怎么用CAD画门的平面图呢?想了解的同学可以参照以下CAD画平面图的教程,自己尝试去画门的平面图!用CAD画平面图的门的方法1、如下图所显示,输入要画矩形的方框,输入rec。2、单击要如下图中点,在进行拉动。3、如果下图没有显示中点的话,可以右击对象捕捉,选择全部选择。4、如下图可以看得以画出一个小矩形框出来。5、可以看到了如下图用矩形画出的门框来…

  • 局域网 广域网 城域网缩写_wan是局域网还是广域网

    局域网 广域网 城域网缩写_wan是局域网还是广域网1局域网基本原理1.12广域网基本原理3IP基本原理4TCP和UDP基本原理

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号