[156]python eval函数妙用和ast.literal_eval

本文详细介绍了Python中的eval函数,包括其功能、语法及参数说明。并通过多个实例展示了如何使用eval函数将字符串转换为列表、字典和元组等数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eval函数妙用

功能:将字符串str当成有效的表达式来求值并返回计算结果。

语法: eval(source, globals, locals) -> value

参数:

  • source:一个Python表达式或函数compile()返回的代码对象
  • globals:可选。必须是dictionary
  • locals:可选。任意map对象

实例展示:

可以把list,tuple,dict和string相互转化。
#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串转换成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>

eval函数将字符串当成有效Python表达式来求值,并返回计算结果

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

与之对应的repr函数,它能够将Python的变量和表达式转换为字符串表示

repr(x==1)
repr(x+1)

ast.literal_eval

ast.literal_eval 是 Python 标准库 ast 模块中的一个函数,用于安全地评估表示 Python 字面量或容器(如列表、字典、元组、集合)的字符串

import ast 
 
# 解析并执行一个数字表达式  
num = ast.literal_eval("3.14")  
print(num) 
#3.14  
  
# 解析并执行一个字符串表达式  
str_ = ast.literal_eval('"Hello, world!"')  
print(str_)  
#Hello, world!
  
# 解析并执行一个元组表达式  
tuple_ = ast.literal_eval("(1, 2, 3)")  
print(tuple_)  
# (1, 2, 3)  
  
# 解析并执行一个列表表达式  
list_ = ast.literal_eval("[1, 2, 3]")  
print(list_) 
#[1, 2, 3]  
  
# 解析并执行一个字典表达式  
dict_ = ast.literal_eval("{'name': 'Alice', 'age': 25}")  
print(dict_)  
# {'name': 'Alice', 'age': 25}  
  
# 解析并执行一个集合表达式  
set_ = ast.literal_eval("{'apple', 'banana', 'cherry'}")  
print(set_)  
# {'apple', 'banana', 'cherry'}

和eval的区别/ast.literal_eval的禁忌

  • ast.literal_eval 仅能解析 Python 字面量和一些容器类型(如列表、字典、元组、集合等),这意味着它不能计算包含 Python 表达式或函数调用的字符串。
  • 这是一个设计上的限制,以确保安全性,防止执行潜在危险的代码。

无法执行的【这些eval都可以】

  • 数学表达式

  • 函数调用

  • 条件表达式

参考:https://blog.youkuaiyun.com/qq_40206371/article/details/138173160

simplejson模块:https://blog.youkuaiyun.com/2401_84204034/article/details/138149039

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值