千家信息网

Python中eval函数的表达式有哪些

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍了Python中eval函数的表达式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。eval 是干嘛的?解析字符串
千家信息网最后更新 2024年11月23日Python中eval函数的表达式有哪些

这篇文章主要介绍了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]")) # 输出结果123True(1, 2, 3)[1, 2, 3]

栗子二

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

栗子三

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

带上 globals

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

在 eval 中提供了globals 参数

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

x = 10y = 5g = {"x": 5}print(eval("x+1+y", g)) # 输出结果5    print(eval("x+1+y", g))  File "", line 1, in NameError: name 'y' is not defined

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

带上 locals

# 使用 localsa = 1g = {"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))) # 输出结果

带上 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 "", line 1, in NameError: name 'aa' is not defined

栗子二

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

栗子三

print(eval("if x: print(x)"))# 输出结果    print(eval("if x: print(x)"))  File "", line 1    if x: print(x)    ^SyntaxError: invalid syntax

因为 eval() 只接受表达式任何其他语句(如if、for、while、import、def、class)都将引发错误

感谢你能够认真阅读完这篇文章,希望小编分享的"Python中eval函数的表达式有哪些"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0