Python中eval函数的表达式作用示例

 更新时间:2021年09月29日 11:43:33   作者:小菠萝测试笔记  
这篇文章主要介绍了Python中eval函数的表达式用法示例,文中通过示例对比来为大家进行详细的讲解,有需要的朋友可以借鉴参下,希望有所帮助

eval 是干嘛的?

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

语法格式

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

expression:表达式字符串

globals:必须是一个字典

locals:可以是任何 map 对象

最简单的表达式栗子

栗子一

print(eval("123"))
print(eval("True"))
print(eval("(1,2,3)"))
print(eval("[1,2,3]")) 
# 输出结果
123
True
(1, 2, 3)
[1, 2, 3]

栗子二

print(eval("1+2")) 
x = 1
print(eval('x+1'))
# 输出结果
3
2

栗子三

a = 1
b = 2
print(eval("[a,b]")) 
# 输出结果
[1, 2]

带上 globals

# 使用 globals
x = 10
g = {"x": 5}
print(eval("x+1", g))
# 输出结果
6 

在 eval 中提供了globals 参数

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

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

# 使用 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 参数里面的值

字符串转字典

# 字符串转字典
jsons = "{'a':123,'b':True}"
print(type(eval(jsons))) 
# 输出结果
<class 'dict'>

带上 globals

print(eval("{'name':'linux','age':age}", {"age": 123}))
# 输出结果
{'name': 'linux', 'age': 123}

带上 locals

print(eval("{'name':'linux','age':age}", {"age": 123}, {"age": 24})) 
# 输出结果
{'name': 'linux', 'age': 24}

内置函数栗子

# 内置函数
print(eval("dir()"))
print(eval("abs(-10)"))
  
# 输出结果
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'g', 'jsons', 'l', 'x', 'y']
10

报错的栗子

栗子一

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

栗子二

print(eval("[a,b,c]"))
# 输出结果
    print(eval("[a,b,c]"))
  File "<string>", line 1, in <module>
NameError: name 'c' is not defined

栗子三

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)都将引发错误

以上就是Python中eval函数的表达式用法示例的详细内容,更多关于Python中eval函数表达式的资料请关注脚本之家其它相关文章!

相关文章

  • Python 使用 Bert 进行中文情感分析的方法

    Python 使用 Bert 进行中文情感分析的方法

    在自然语言处理(NLP)领域,情感分析是一个非常常见且重要的应用,本文将带领新手使用 BERT 模型进行中文情感分析,并会详细讲解如何加载开源数据集、训练模型、评估准确度,并最终导出模型供未来使用,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • python try except返回异常的信息字符串代码实例

    python try except返回异常的信息字符串代码实例

    这篇文章主要介绍了python try except返回异常的信息字符串代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 从Pyspark UDF调用另一个自定义Python函数的方法步骤

    从Pyspark UDF调用另一个自定义Python函数的方法步骤

    PySpark,通常称为Apache Spark的Python API,是为分布式数据处理而创建的,使用UDF,可以扩展和定制 PySpark 的功能以满足某些需求,在本文中,我们将学习如何从Pyspark UDF调用另一个自定义Python函数,需要的朋友可以参考下
    2023-11-11
  • python库patchworklib多图表整合用法示例探究

    python库patchworklib多图表整合用法示例探究

    这篇文章主要介绍了python库patchworklib对齐matplotlib图表,将多个图表的整合为单一图表用法示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python帮你解决手机qq微信内存占用太多问题

    Python帮你解决手机qq微信内存占用太多问题

    你有没有发现以前16G内存也可以装几个游戏玩,现在128G的却日常使用都不够了?更不用说装什么游戏,这其实是软件内存占用过多导致的,今天我们用python来清理下
    2022-02-02
  • python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比

    python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比

    这篇文章主要给大家介绍了关于python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 多线程爬虫批量下载pcgame图片url 保存为xml的实现代码

    多线程爬虫批量下载pcgame图片url 保存为xml的实现代码

    用Python写的多线程爬虫批量下载pcgame的图片url并保存为xml格式,主要是逻辑代码,喜欢的朋友可以测试下
    2013-01-01
  • pyinstaller生成的exe文件启动时间漫长的原因

    pyinstaller生成的exe文件启动时间漫长的原因

    本文主要介绍了pyinstaller生成的exe文件启动时间漫长的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • tf.truncated_normal与tf.random_normal的详细用法

    tf.truncated_normal与tf.random_normal的详细用法

    本篇文章主要介绍了tf.truncated_normal与tf.random_normal的详细用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python typing模块--类型提示支持

    python typing模块--类型提示支持

    这篇文章主要介绍python typing模块类型提示支持, typing 模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查,下面进入文章一起了解详细内容吧
    2021-10-10

最新评论