Python中的eval--字符串解析

以前在C语言中常用占位符,来实现字符串解析,当然Python中也有这种用法:

a = 10
print("%s + 1" % a)

    运行结果:10 + 1

但是占位符只能做替换,其实跟字符串拼接没有什么区别,在替换变量少时比拼接更麻烦,所以现在用的比较少了,更多的时候是在数据库查询和需要替换变量个数较多时。

这里我们要介绍一个更加强大的函数,不仅可以完成替换,还可以还可以把字符串转变成一个表达式进行求值运算。

  • eval:将字符串str当成有效的表达式来求值并返回计算结果
  • eval(source, globals=Nonelocals=None)
  • 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.
  • 一个必须提供的str参数source, 和两个可选参数globals, locals, 其中globals必须是字典类型。
  • 当只提供source时
a = 10
print(eval("a + 1"))

    运行结果:11

  • 当提供source和globals时
a = 10
g = {'a': 23}
print(eval("a + 1", g))

    运行结果:24

  • 当三个参数都提供时
a = 10
g = {'a': 23}
t = {'a': 100}
print(eval("a + 1", g, t))

    运行结果:101

    这个三个例子说名,eval()函数如果只提供source参数,则会在整个代码文件中获取a的值,而如果提供了globals,则在globals中查找,屏蔽外部参数,如果globals中找不到,则报错;如果再提供了locals参数,则先从locals中查找,若找到则直接获取,若没有再去globals中查找,如果globals中还找不到,则报错,这叫做“县官不如现管”。

a = 10
g = {'a': 23}
t = {'b': 100}
print(eval("a + 1", g, t))

    运行结果:24

a = 10
g = {'b': 23}
t = {'b': 100}
print(eval("a + 1", g, t))

    运行结果:


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值