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