详解python eval函数的妙用

 更新时间:2017年11月16日 17:14:55   投稿:zx  
这篇文章主要介绍了详解python eval函数的妙用,详细介绍了python eval函数的具体用法和实例,有兴趣的可以了解一下

python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。

函数定义:

eval(expression, globals=None, locals=None)

将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。

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

Python版本兼容:

  1. Python2.7
  2. Python3.x

eval()主要作用:

1)在编译语言里要动态地产生代码,基本上是不可能的,但动态语言是可以,意味着软件已经部署到服务器上了,但只要作很少的更改,只好直接修改这部分的代码,就可立即实现变化,不用整个软件重新加载。
2)在machin learning里根据用户使用这个软件频率,以及方式,可动态地修改代码,适应用户的变化。

英文解释:

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.

The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard builtins module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval() is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:

例子:

a=1
g={'a':20}
eval("a+1",g)

结果:
1

例子2, 测试globals, locals

x = 1
y = 1
num1 = eval("x+y")
print (num1)
def g(): 
 x = 2 
 y = 2 
 num3 = eval("x+y") 
 print (num3)  
 num2 = eval("x+y",globals()) 
 #num2 = eval("x+y",globals(),locals()) 
 print (num2)
  
g()

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4

实例展示:

可以把list,tuple,dict和string相互转化。

#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串转换成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>

安全问题:

因为eval的特型, 很可能被黑客利用,造成安全问题。

怎么避免安全问题?

1、自行写检查函数;

2、使用ast.literal_eval代替

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Django中如何使用Channels功能

    Django中如何使用Channels功能

    这篇文章主要介绍了在Django中使用Channels功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • python3模拟实现xshell远程执行linux命令的方法

    python3模拟实现xshell远程执行linux命令的方法

    今天小编就为大家分享一篇python3模拟实现xshell远程执行linux命令的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python爬虫请求模块Urllib及Requests库安装使用教程

    Python爬虫请求模块Urllib及Requests库安装使用教程

    requests和urllib都是Python中常用的HTTP请求库,使用时需要根据实际情况选择,如果要求使用简单、功能完善、性能高的HTTP请求库,可以选择requests,如果需要兼容性更好、功能更加灵活的HTTP请求库,可以选择urllib
    2023-11-11
  • python用pyecharts画矩形树图实例

    python用pyecharts画矩形树图实例

    大家好,本篇文章主要讲的是python用pyecharts画矩形树图实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Django 自定义404 500等错误页面的实现

    Django 自定义404 500等错误页面的实现

    这篇文章主要介绍了Django 自定义404 500等错误页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python学生管理系统学习笔记

    python学生管理系统学习笔记

    这篇文章主要为大家详细介绍了python学生管理系统的学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 在Python中获取两数相除的商和余数方法

    在Python中获取两数相除的商和余数方法

    今天小编就为大家分享一篇在Python中获取两数相除的商和余数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • pandas的to_datetime时间转换使用及学习心得

    pandas的to_datetime时间转换使用及学习心得

    这篇文章主要给大家介绍了关于pandas的to_datetime时间转换使用及学习心得的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用pandas具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Python爬虫之Selenium多窗口切换的实现

    Python爬虫之Selenium多窗口切换的实现

    这篇文章主要介绍了Python爬虫之Selenium多窗口切换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python基于Matplotlib库简单绘制折线图的方法示例

    Python基于Matplotlib库简单绘制折线图的方法示例

    这篇文章主要介绍了Python基于Matplotlib库简单绘制折线图的方法,涉及Python Matplotlib库的相关使用技巧,需要的朋友可以参考下
    2017-08-08

最新评论