博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《python》 eval()函数解析
阅读量:4230 次
发布时间:2019-05-26

本文共 1425 字,大约阅读时间需要 4 分钟。

感谢博主:大大的橙子

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

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

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

当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
1)局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
2)全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
3)内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。

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

eval()使用原因:

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

example:a=1g={
'a':20}eval("a+1",g)返回21
#test eval() and locals()x = 1y = 1num1 = eval("x+y")print (num1)      #2def g():        x = 2        y = 2      num3 = eval("x+y")      #4    print (num3)            num2 = eval("x+y",globals())     #2    num2 = eval("x+y",globals(),locals())     #4    print (num2)g()num1的值是2;num3的值是4;num2的值呢?由于提供了globals()参数,那么首先应当找全局的x和y值,也就是都为1,那么显而易见,num2的值也是2。如果注释掉该句,执行下面一句呢?根据第3)点可知,结果为4****locals()对象的值不能修改,globals()对象的值可以修改****#test globals() and locals()z=0def f():        z = 1        print (locals())            locals()["z"] = 2        print (locals())      f() globals()["z"] = 2print (z)

“`

可以得出,两个print (locals())的结果是一样的,说明没有修改成功。而print (z)的值是2,说明修改成功了

转载地址:http://qoiqi.baihongyu.com/

你可能感兴趣的文章
Microsoft Windows PowerShell: TFM
查看>>
Java Drawing with Apache Batik: A Tutorial
查看>>
Essential Windows Presentation Foundation
查看>>
Model-Driven Design Using Business Patterns
查看>>
Core Internet Application Development with ASP.NET 2.0
查看>>
Microsoft SharePoint 2007 For Dummies
查看>>
Core JavaServer(TM) Faces, Second Edition
查看>>
Beginning C# 2005 Databases: From Novice to Professional
查看>>
Adobe Flash CS3 Professional Classroom in a Book
查看>>
Digital Image Processing: PIKS Scientific Inside
查看>>
Photoshop CS3 For Dummies
查看>>
Beginning DirectX 9
查看>>
Programming Windows Workflow Foundation: Practical WF Techniques and Examples using XAML and C#
查看>>
SQL Server 2005 Reporting Essentials
查看>>
Build Your Own Ruby on Rails Web Applications [ILLUSTRATED]
查看>>
Secure Your Network for Free [ILLUSTRATED]
查看>>
The Elements of UML(TM) 2.0 Style
查看>>
The OpenBSD 4.0 Crash Course
查看>>
Writing Scientific Software: A Guide to Good Style
查看>>
Pro Oracle Collaboration Suite 10g
查看>>