Python中eval函数是什么

发布时间:2020-08-04 15:03:31 作者:清晨
来源:亿速云 阅读:330

小编给大家分享一下Python中eval函数是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

eval(expression[, globals[, locals]])

·expression:表达式。

·globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。

·locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> n=81
>>> eval("n + 4")
85

默认作用域

在 globals 和 locals 两个参数省略的情况下,eval() 函数在当前的作用域执行:

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(eval("x + y"))
compute()

输出结果:

30

globals 作用域

Python 的全局名字空间存储在一个叫 globals() 的字典对象中;局部名字空间存储在一个叫 locals() 的字典对象中。我们可以用 print () 来查看该函数体内的所有变量名和变量值。

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(globals())
    print(locals())
compute()

输出结果:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.
SourceFileLoader object at 0x0000024AC58C7710>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 
'builtins' (built-in)>, '__file__': 'D:/Code/draw.py', '__cached__': None, 'x': 100, 'y': 200, 'compute': 
<function compute at 0x0000024AC587C268>}
{'x': 10, 'y': 20}

从结果可以看到,globals() 的结果包含了全局变量 'x': 100, 'y': 200 ,而 locals() 则包含的是局部变量 'x': 10, 'y': 20。eval 函数包含 globals 参数则会使用全局作用域下的变量。

x = 100
y = 200
def compute():
    x = 10
    y = 20
    print(eval("x + y", globals()))
    
compute()

输出结果:

300

locals 作用域

如果同时包含 globals 和 locals 参数,则会优先在本地作用域查找,如果本地作用域没有,才会查找全局作用域。

x = 100
def compute():
    y = 20
    print(eval("x + y", globals(), locals()))
compute()

输出结果:

120

字符串转换

字符串转换成列表

s = "[[1,2], [3,4], [5,6]]"
print(type(s))
lst = eval(s)
print(type(lst))
print(lst)

输出结果:

<class 'str'>
<class 'list'>
[[1, 2], [3, 4], [5, 6]]

字符串转换成字典

s = "{'math': 90, 'chinese': 100}"
print(type(s))
dic = eval(s)
print(type(dic))
print(dic)

输出结果:

<class 'str'>
<class 'dict'>
{'math': 90, 'chinese': 100}

字符串转换成元组

s = "([1,2], [3,4], [5,6])"
print(type(s))
tup = eval(s)
print(type(tup))
print(tup)

输出结果:

<class 'str'>
<class 'tuple'>
([1, 2], [3, 4], [5, 6])

需要注意的地方

eval() 函数有安全性问题,比如用户恶意输入就会获得当前目录文件。

eval("__import__('os').system('dir')")

甚至查看目录下的所有文件的内容:

eval(open(‘filename’).read())

怎么避免安全问题?

·自行写检查函数;

·使用 ast.literal_eval。

以上是Python中eval函数是什么的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. python中eval函数有什么用
  2. python中eval函数使用示例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python eval eva

上一篇:重复制造Bapi

下一篇:Android_Intent用于Activity间跳转与传值

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》