前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python - eval()

Python - eval()

作者头像
小菠萝测试笔记
发布于 2021-09-14 08:55:50
发布于 2021-09-14 08:55:50
90600
代码可运行
举报
运行总次数:0
代码可运行

eval 是干嘛的?

解析字符串表达式并执行,并返回一个值

语法格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eval(expression[, globals[, locals]]) 
  • expression:表达式字符串
  • globals:必须是一个字典
  • locals:可以是任何 map 对象

最简单的表达式栗子

栗子一
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("123"))
print(eval("True"))
print(eval("(1,2,3)"))
print(eval("[1,2,3]"))


# 输出结果
123
True
(1, 2, 3)
[1, 2, 3]
栗子二
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("1+2"))

x = 1
print(eval('x+1'))


# 输出结果
3
2
栗子三
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 1
b = 2
print(eval("[a,b]"))


# 输出结果
[1, 2]
带上 globals
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用 globals
x = 10
g = {"x": 5}
print(eval("x+1", g))


# 输出结果
6 

在 eval 中提供了globals 参数

eval 的作用域就是 g 指定的这个字典,外面的 x = 10 被屏蔽掉了,eval 是看不见的,所以使用了 x 为 5 的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = 10
y = 5
g = {"x": 5}
print(eval("x+1+y", g))


# 输出结果
5
    print(eval("x+1+y", g))
  File "<string>", line 1, in <module>
NameError: name 'y' is not defined

因为 global 参数没有 y 变量值,所以报错了

带上 locals
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用 locals
a = 1
g = {"a": 2, "b": 3}
l = {"b": 30, "c": 4}

print(eval("a+b+c", g, l))


# 输出结果
36
  • eval 的作用域变成了 globals + locals
  • locals 作用域优先级会高于 globals
  • locals 参数里面的值会覆盖 globals 参数里面的值

字符串转字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 字符串转字典
jsons = "{'a':123,'b':True}"
print(type(eval(jsons)))


# 输出结果
<class 'dict'>
带上 globals
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("{'name':'linux','age':age}", {"age": 123}))


# 输出结果
{'name': 'linux', 'age': 123}
带上 locals
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("{'name':'linux','age':age}", {"age": 123}, {"age": 24}))


# 输出结果
{'name': 'linux', 'age': 24}

内置函数栗子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 内置函数
print(eval("dir()"))
print(eval("abs(-10)"))


# 输出结果
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'g', 'jsons', 'l', 'x', 'y']
10

报错的栗子

栗子一
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("aa"))


# 输出结果
    print(eval("aa"))
  File "<string>", line 1, in <module>
NameError: name 'aa' is not defined
栗子二
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("[a,b,c]"))


# 输出结果
    print(eval("[a,b,c]"))
  File "<string>", line 1, in <module>
NameError: name 'c' is not defined
栗子三
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(eval("if x: print(x)"))


# 输出结果
    print(eval("if x: print(x)"))
  File "<string>", line 1
    if x: print(x)
    ^
SyntaxError: invalid syntax
  • 因为 eval() 只接受表达式
  • 任何其他语句(如if、for、while、import、def、class)都将引发错误
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python中的eval()、exec()及其相关函数
刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档。这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals()、locals()和compile():
全栈程序员站长
2022/09/08
9090
python3中eval函数用法简介[通俗易懂]
python中eval函数的用法十分的灵活,这里主要介绍一下它的原理和一些使用的场合。
全栈程序员站长
2022/11/02
1.2K0
Python中eval带来的潜在风险,你知道吗?
00 前言 eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行。比如下列代码: >>> eval("1+2") 3 >>> eval("[x for x in range(10)]") [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 当内存中的内置模块含有os的话,eval同样可以做到命令执行: >>> import os >>> eval("os.system('whoami')") win-20140812chj\administra
CDA数据分析师
2018/02/05
3K0
eval在python中是什么意思_如何在Python中使用eval ?
在Python中,我们有许多内置方法,这些方法对于使Python成为所有人的便捷语言至关重要,而eval是其中一种。eval函数的语法如下:
全栈程序员站长
2022/11/17
3.4K0
深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。
Python猫
2019/03/24
3K0
深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。
程序员小新
2021/12/30
6000
python中的eval函数的用法_isnan函数
  在Python中eval()函数的语法格式为eval(expression, globals=None, locals=None),注意后面还有globals参数和locals参数。eval()函数用于执行一个字符串表达式,并且返回该表达式的值。与eval相近的有exec函数,该函数将会在另一篇文章详细讲解。
全栈程序员站长
2022/11/01
1.1K0
深度辨析 Python 的 eval() 与 exec()
Python 提供了很多内置的工具函数(Built-in Functions),在最新的 Python 3 官方文档中,它列出了 69 个。
Python猫
2019/04/09
6620
python中eval函数作用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
9100
人生苦短我用python: eval,e
01、函数原型 eval(expression[, globals[, locals]])
py3study
2020/01/15
9040
python内置函数大全
 数学运算 abs:求数值的绝对值 >>> abs(-2) 2 divmod:返回两个数值的商和余数 >>> divmod(5,2) (2, 1) >> divmod(5.5,2) (2.0, 1.5) max:返回可迭代对象中的元素中的最大值或者所有参数的最大值 >>> max(1,2,3) # 传入3个参数 取3个中较大者 3 >>> max('1234') # 传入1个可迭代对象,取其最大元素值 '4' min:返回可迭代对象中的元素中的最小值或者所有参数的最小值 >>> min(1,2,3
人生不如戏
2018/04/12
2.9K0
Python基础教程之第5章 条件, 循环和其他语句
参考链接: Python成员资格和身份运算符 | in, not in, is, is not
用户7886150
2020/11/29
3800
《Python基础教程》 读书笔记 第五章(下)条件语句
while语句非常灵活。它可以用来在任何条件为真的情况下重复执行一个代码块。一般情况下这样就够用了,但是有些时候还得量体裁衣。比如要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块。这个时候可以使用for语句:
统计学家
2019/04/10
6990
Python - eval 和 exec 函数
Python 支持通过 eval 函数执行字符串命令,本文记录相关内容。 eval eval() 函数用来执行一个字符串表达式,并返回表达式的值。 语法 以下是 eval() 方法的语法: eval(expression[, globals[, locals]]) 参数 expression – 表达式。 globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。 locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。 示例 a="[1,2,3,4,5]"
为为为什么
2022/08/04
7930
如何使用python 执行命令行传入的代码
实参是一个字符串,以及可选的 globals 和 locals。globals 实参必须是一个字典。locals 可以是任何映射对象。
流川疯
2021/12/08
1.7K0
python eval的常见错误封装及利
最近在代码评审的过程,发现挺多错误使用eval导致代码注入的问题,比较典型的就是把eval当解析dict使用,有的就是简单的使用eval,有的就是错误的封装了eval,供全产品使用,这引出的问题更严重,这些都是血淋淋的教训,大家使用的时候多加注意。  下面列举一个实际产品中的例子,详情见bug83055:
py3study
2020/01/07
8690
开源图书《Python完全自学教程》7.3.3作用域
以7.3.2节定义的 out() 函数内的 inner() 函数为例,在 out() 函数所在的区域不能调用 inner() 函数(见7.3.2节中的报错信息),其根源即为这里介绍的作用域(Scope)。每个名称所引用的对象,都有各自的创建位置,也都有各自能够产生作用的区域,此区域称为作用域——在 Python 中,名称的作用域由其所在位置决定。Python 解释器会根据名称定义的位置和及其在代码中的引用位置来确定作用域,以下按照搜索顺序列出各个作用域(如图7-3-2所示):
老齐
2022/07/06
3640
开源图书《Python完全自学教程》7.3.3作用域
python compile、eval、
    compile()函数允许程序员在运行时刻迅速生成代码对象,然后就可以用exec 语句或者内建函数eval()来执行这些对象或者对它们进行求值。一个很重要的观点是:exec 和eval()都可以执行字符串格式的Python 代码。当执行字符串形式的代码时,每次都必须对这些代码进行字节编译处理。compile()函数提供了一次性字节代码预编译,以后每次调用的时候,都不用编译了。
py3study
2020/01/09
1.4K0
matinal:python 部分内置函数详解
eval和exec都是python内置的可以执行python代码的函数,但它们之间有所区别。
matinal
2023/10/14
2240
Python eval 函数妙用
语法: eval(source, globals, locals) -> value
周小董
2019/03/25
8760
推荐阅读
相关推荐
Python中的eval()、exec()及其相关函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验