Python 中的 eavl() 函数
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-8import mathdef 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()函数危险性浅析
Python 中的 eavl() 函数相关推荐
- python中的pop()函数和popleft()函数
python中的pop()函数和popleft()函数 首先对于pop而言,它是用于stack中的: stack = [1, 2, 3, 4] print(stack) stack.append(6) ...
- python中使用zip函数基于两个列表数据list创建字典dict数据(Create a dictionary by passing the output of zip to dict)
python中使用zip函数基于两个列表数据list创建字典dict数据(Create a dictionary by passing the output of zip to dict) 目录
- python中add函数_如何使用python中的add函数?
之前向大家介绍过python中的求和函数sum函数,numpy中的sum函数,对于数组可以指定维度进行相加.numpy中还有另一种求和运算方法,即add函数.add函数不仅作用于numpy中加法运算, ...
- python 2: 解决python中的plot函数的图例legend不能显示中文问题
python 2: 解决python中的plot函数的图例legend不能显示中文问题 参考文章: (1)python 2: 解决python中的plot函数的图例legend不能显示中文问题 (2) ...
- python中list作为函数参数_在python中list作函数形参,防止被实参修改的实现方法
0.摘要 我们将一个list传入函数后,函数内部对实参修改后,形参也会随之改变.本文将主要介绍这种错误的现象.原因和解决方法. 1.代码示例 def fun(inner_lst): inner_lst ...
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下
- python input与返回值-python中使用input()函数获取用户输入值方式
我们编写程序最终目的还是来解决实际问题,所以必然会遇到输入输出的交互问题,python中提供了input函数用来获取用户的输入,我们可以用以下程序演示. user_gender = input(&qu ...
- Python中的sorted函数以及operator.itemgetter函数
from:Python中的sorted函数以及operator.itemgetter函数 operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪 ...
- python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools impor ...
最新文章
- 数字下变频和数字上变频
- 【python】 web开发入门
- Ubuntu没有chkconfig服务解决办法
- 2019全球AI训练营五地再同发
- SpringCloud Netflix Ribbon
- php 静态成员(static)抽象类(abstract)和接口(interface)
- 网络游戏仅可在规定时间向未成年人提供1小时服务
- Spring : Spring Aop之ProxyFactory
- 特斯拉进入Autopilot 2.0时代,高举“普通雷达”旗帜!
- Django支付宝自动转账功能(一)
- AD19自动布线出错,有些线未连接
- luncence学习
- 图解傅里叶变换(时域频域)
- 配对交易——初识统计套利
- 安全帽检测/人脸识别系统国标GB28181协议云服务EasyGBS搭建智慧工地 助力智慧建筑生态圈
- 服务器自检后显示scsi,“服务器百问百答”服务器怎样格式化SCSI硬盘?
- java-php-python-ssm校园失物招领系统计算机毕业设计
- vbs可以调用python脚本吗?
- python创建子类对象会先创建父类对象_Python练习,python,习题
- map中自定义比较函数