前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python神奇函数之eval()学习

python神奇函数之eval()学习

作者头像
用户7886150
修改2021-01-25 10:23:22
3870
修改2021-01-25 10:23:22
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python eval()

前些天发现了一个风趣幽默的人工智能学习网站,通俗易懂,忍不住分享一下给大家。点击跳转到教程? ?

? ?python中有很多内置的很有用的工具函数,熟练地使用这些小工具绝对可以帮助你在工作中达到事半功倍的效果,今天由于需要用到了eval()函数,这个函数其实之前就用过了但是由于最近一直忙于看论文和方向上的一些其他的事,这个东西也就慢慢忘掉了,今天要用,索性直接再学一下,这里就作为是学习的记录了。?

eval()官方文档里面给出来的功能解释是:将字符串string对象转化为有效的表达式参与求值运算返回计算结果?

语法上:调用的是:eval(expression,globals=None, locals=None)返回的是计算结果?

其中:?

? ? expression是一个参与计算的python表达式?

? ? globals是可选的参数,如果设置属性不为None的话,就必须是dictionary对象了?

? ? locals也是一个可选的对象,如果设置属性不为None的话,可以是任何map对象了?

python是用命名空间来记录变量的轨迹的,命名空间是一个dictionary,键是变量名,值是变量值。?

当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:?

1)局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。?

2)全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。?

3)内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。?

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

下面简单演示一下eval()函数的使用:?

#!usr/bin/env python

#encoding:utf-8

import math

def eval_test():

? ? l='[1,2,3,4,[5,6,7,8,9]]'

? ? d="{'a':123,'b':456,'c':789}"

? ? t='([1,3,5],[5,6,7,8,9],[123,456,789])'

? ? print '--------------------------转化开始--------------------------------'

? ? print type(l), type(eval(l))

? ? print type(d), type(eval(d))

? ? print type(t), type(eval(t))

if __name__=="__main__":

? ? eval_test()?

?运行结果为:?

--------------------------转化开始--------------------------------

<type 'str'> <type 'list'>

<type 'str'> <type 'dict'>

<type 'str'> <type 'tuple'>

[Finished in 0.2s]?

?上面简单演示的是eval在字符串对象和list、dictinoary、tuple对象之间的转换作用?

众所周知:?

eval()的确是一个很便捷的工具,但是便捷使用不当的同时也会造成严重的安全问题,不少的文章和博客都对eval()的安全性进行了相关的分析,在这里我就不多说了,文章最后会给出一些不错的参考资料,感兴趣的话可以看一下。?

如何来避免eval()带来的安全性问题呢?在这里给出两点建议:?

1、自行写检查函数;?

2、使用ast.literal_eval:自行查看DOCUMENT?

参考:?

Python:eval的妙用和滥用?

python eval()?

Python eval 函数妙用?

Python 中 eval 带来的潜在风险?

Python之eval()函数危险性浅析

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com