python eval函数简单使用

eval是python的一个内置函数,其作用是返回传入字符串的表达式的结果

  • 语法:eval(expression[, globals[, locals]])
    • expression: 这个参数是一个表达式
    • globals: 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象
    • locals: 变量作用域,局部命名空间,如果被提供,可以是任何映射对象

python命名空间

1. 只提供第一个参数,eval的作用就是将expression的引号去掉,保留引号中字符的原有属性
m = "123"
print(eval(m))
# 输出123
x = 3
print(eval("3 * x"))
print(eval("pow(2, x)"))
# 输出9 8
n = "ABC"
print(eval(n))
# NameError: name 'ABC' is not define
# 在这个程序中,eval会剥去变量n的引号,发现ABC不能像上一个程序一样计算
# eval就会认为ABC是一个变量名,并在当前作用域查找ABC变量
# 未能找到,报错
ABC = "DEF"
n = "ABC"
print(eval("n"))
print(eval(n))
# 第一个eval尝试剥去"n"的引号,n不能进行计算,于是认为n是一个变量,查找变量n并print(n)
# 第二个eval尝试剥去n的引号,ABC不能进行计算,于是认为ABC是一个变量,查找变量ABC并print(ABC)
# eval函数还能将形似列表的字符串变成真列表
m = "['123', '456', '789']"
print(type(m))

n = eval(m)
print(type(n))
print(n)
# 输出:
# <class 'str'>
# <class 'list'>
# ['123', '456', '789']
m = "[A, B, C]"
print(eval(m))
# 剥去m的引号发现是一个列表,列表中是一些变量,于是查找变量
# 未能找到,NameError: name "A' is not defined

A = 1
B = 2
C = 3
n = "['A', 'B', 'C']"
print(eval(n))
# 剥去n的引号发现是一个列表,列表中是一些变量,于是查找变量
# 全部找到,输出:[1, 2, 3]
2. 同时提供globals这个参数
A = 1
B = 2
C = 3
dic = {'A': 10, 'B': 20}
print(eval("A + B", dic))
# 输出30
# 相当于eval的作用域变成了dic这个字典,外面的A,B都看不到了

print(eval("A + B + C", dic))
# Namerror: name 'C' is not defined
# 找不到变量C
3. 同时提供locals这个参数
A = 1
B = 2
C = 3
dic1 = {'A': 10, 'B': 20}
dic2 = {'A': 100, 'C': 300}
print(eval("A + B + C", dic1, dic2))
# 输出420
# dic2的优先级高于dic1,先从dic2中查找变量,未找到的再从dic1中查找
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值