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

目录
  • eval 是干嘛的?
  • 语法格式
  • 最简单的表达式栗子
    • 带上 globals
    • 带上 locals
  • 字符串转字典
    • 带上 globals
    • 带上 locals
  • 内置函数栗子
  • 报错的栗子

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函数表达式的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解python中eval函数的作用

    eval() 函数用来执行一个字符串表达式,并返回表达式的值. eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果.eval函数可以实现list.dict.tuple与str之间的转化 eval() 方法的语法: eval(expression[, globals[, locals]]) 参数: expression -- 表达式. globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象. locals -- 变量作用域,局部命名空间,如果被提供,可以

  • Python 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(ty

  • 详解python eval函数的妙用

    python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果. 函数定义: eval(expression, globals=None, locals=None) 将字符串str当成有效的表达式来求值并返回计算结果.globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型:如果提供了locals参数,那么它可以是任意的map对象. python的全局名字空间存储在一个叫globals()的dict对象中:局部名字空间存储在

  • Python之eval()函数危险性浅析

    一般来说Python的eval()函数可以把字符串"123"变成数字类型的123,但是PP3E上说它很危险,还可以执行其他命令! 对此进行一些试验.果然,如果python写的cgi程序中如果使用eval()而非int()来转换诸如年龄这样的输入框中的内容时是非常危险的.不仅可以看见列出系统的全部文件,还可以执行删除文件,察看文件源代码等危险操作! 试着写了个程序,想把本地的脚本文件同过这样的形式一行一行的写到服务器的某个文件里,可最后失败在无法输入换行符"/n",在

  • Python eval函数介绍及用法

    我们之前跟大家描述了在Python里面一些函数的不同使用,以及一些函数的潜藏使用技巧,可是大家有没有听说过,有一个函数一直被誉为最神奇的函数,神奇的地方在哪里?到底怎么神奇?请看下文. 关于eval(): 将字符串string对象转化为有效的表达式参与求值运算返回计算结果. 语法上: 调用的是:eval(expression,globals=None, locals=None)返回的是计算结果 其中: 1.expression是一个参与计算的python表达式 2.globals是可选的参数,如

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

    目录 eval 是干嘛的? 语法格式 最简单的表达式栗子 带上 globals 带上 locals 字符串转字典 带上 globals 带上 locals 内置函数栗子 报错的栗子 eval 是干嘛的? 解析字符串表达式并执行,并返回一个值 语法格式 eval(expression[, globals[, locals]]) expression:表达式字符串 globals:必须是一个字典 locals:可以是任何 map 对象 最简单的表达式栗子 栗子一 print(eval("123&qu

  • Python中eval()函数的详细使用教程

    目录 eval()函数 语法 实例 实例1 实例2 实例3 附:使用例子 总结 eval()函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值. 语法 eval(expression[, globals[, locals]]) expression – 表达式.globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象.locals–变量作用域,局部命名空间,如果被提供,可以是任何映射对象. 返回值:返回表达式计算结果. 实例 我们在从键盘输入数据时,Pyth

  • python中map()函数的使用方法示例

    前言 在python里有一个函数map(),它有点高大上的感觉.本文将详细给大家介绍python中map()函数使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 或许你已经看过GOOGLE最挣钱的论文: "MapReduce: Simplified Data Processing on Large Clusters" Google的那篇MapReduce论文里说:Our abstraction is inspired by the map and redu

  • python中reduce()函数的使用方法示例

    前言 本文主要给大家介绍了关于python中reduce()函数使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: reduce()函数在库functools里,如果要使用它,要从这个库里导入.reduce函数与map函数有不一样地方,map操作是并行操作,reduce函数是把多个参数合并的操作,也就是从多个条件简化的结果,在计算机的算法里,大多数情况下,就是为了简单化.比如识别图像是否是一只猫,那么就是从众多的像素里提炼出来一个判断:是或否.可能是几百万个像素,就只

  • python中open函数的基本用法示例

    前言 本文主要介绍的是关于python中open函数用法的相关资料,用法如下: name = open('errname.txt','w')<br>name.readline()<br>name.close() 1.看下第一行的代码 用来访问磁盘中存放的文件,可以进行读写等操作,例如上例中 'w',这里便是对errname.txt这个文件进行读操作 例如: w:以写方式打开 a:以追加方式打开 r+:以读写模式打开 w+:以读写模式打开 rb:以二进制读模式打开 wb:以二进制写模

  • 浅谈Python中eval的强大与危害

    eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果.想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果. python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点.本文从灵活性和危险性两方面介绍eval. 1.强大之处 举几个例子感受一下,字符串与list.tuple.dict的转化. a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]&

  • python3中eval函数用法使用简介

    python中eval函数的用法十分的灵活,这里主要介绍一下它的原理和一些使用的场合. 下面是从python的官方文档中的解释: The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object. The expression argument is parsed a

  • 详解python中groupby函数通俗易懂

    一.groupby 能做什么? python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算! 对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下: df[](指输出数据的结果属性名称).groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式--函数名称) 举例如下: print(df["评分"].groupby([df["地区"],df["类

  • python 中if else 语句的作用及示例代码

    引入:if-else的作用,满足一个条件做什么,否则做什么. if-else语句语法结构 if 判断条件: 要执行的代码 else: 要执行的代码 判断条件:一般为关系表达式或bool类型的值 执行过程:程序运行到if处,首先判断所带的条件,如果条件成立,就是返回值是True,则执行下面的代码:如果条件不成立则返回值是False, 则继续执行下面的代码. 示例1:模拟用户登录 提示输入用户名和密码 如果用户名是Admin,密码等于123.com, 提示用户登录成功 如果用户名不是Admin,提示

随机推荐