概述
# eval函数
# eval(expression,globals=None,locals=None)
# expression:这个参数是一个字符串,python会使用globals字典和locals字典作为全局和局部的命名空间,将expression当做一个python
# 表达式(从技术上讲,是一个条件列表)进行解析和计算。
# globals:这个参数管控的是一个全局的命名空间,也就是我们在计算表达式的时候可以使用全局的命名空间中的函数,如果这个参数被提供了,
# 并且没有提供自定义的__builtins__,那么会将当前环境中的__builtins__拷贝到自己提供的globals里,然后才会进行计算。
# 关于__builtins__,它是python的内建模块,也就是python自带的模块,不需要我们import就可以使用的,例如我们平时使用的int、
# str、abs等都在这个模块中。
# locals:这个参数管控的是一个局部的命名空间,和globals类似,不过当它和globals中有重复的部分时,locals里的定义会覆盖掉globals
# 中的,也就是当globals和locals中有冲突的部分时,locals说了算,它有决定权,以它的为准。如果locals没有被 提供的话,则默认为globals。
下面举一些简单的用例:
# 将字符串str当成有效的表达式来求值并返回计算
a = "3*2"
print(eval(a)) # 脱去外层"",当成表达式求值,此时返回6
a = 10
print(eval("a+1")) # 返回11
# 切片取数
a = "1234"
print(eval(a[0])) # 取字符串第0个元素,此时返回1
print(eval(a[2])) # 返回3
# 在globals指定的情况下:
a = 10
g = {'a': 4}
print(eval("a + 1", g)) # 此时返回值为5,因为提供了globals参数,这时eval作用域就是g指定的字典,也就是说外面的a=10被屏蔽掉
# 在locals指定的情况下:
a = 10
b = 20
c = 30
g = {'a': 6, 'b': 8}
t = {'b': 100, 'c': 10}
print(eval('a+b+c', g, t))
# 此时返回值为116,g屏蔽掉全局变量a和b,locals又与globals起冲突,此时locals起决定作用,b值为t中的b值100
a = '["a", "b", "c"]'
print(eval(a)) # 返回['a', 'b', 'c']
最后
以上就是老迟到小霸王为你收集整理的eval函数介绍与用法的全部内容,希望文章能够帮你解决eval函数介绍与用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复