文章转自 男票的博客 哈哈哈!并以通俗的语法复述~
Together_CZ的博客
种一棵树,最好的时间是十年前,其次是现在
每天学习哥哥一小步 大家可以跟着我一起学习~一大步
有问题问我 ==
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对象之间的转换作用