Python入门精华eval()
eval()函数1.函数原型:eval(expression[,globals[,locals]])
expression----表达式
globals----变量作用域,全局命名空间,如果被提供,则必须是一个字典对象
locals----变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
返回值----返回表达式计算结果2.实例:>>>x = 7 >>> eval( "3 * x" ) 21 >>> eval("pow(2,2)") 4 >>> eval("2 + 2") 4 >>> n=81 >>> eval("n + 4") 853.命名空间
python是用命名空间来记录变量的运行状态的,命名空间是一个dictionary型的对象,键是变量名,值是变量值。
在任何一个python的程序当中,都存在 ==多个命名空间==。
每个函数都有着自已的命名空间,叫做 ==局部空间==,它记录了 ==函数的变量==,包括 ==函数的参数和局部定义的变量==。
每个模块拥有它自已的命名空间,叫做 ==全局空间==,它记录了 ==模块的变量==,包括==函数==、==类==、==其它导入的模块==、==模块级的变量和常量==。还有就是==内置空间==, 任何模块均可访问它,它存放着==内置的函数和异常==。
python的 ==全局空间存储在一个叫 **globals()** 的dict对象中== ;==局部名字空间存储在一个叫 **locals()** 的dict对象中==。可以用 ==**print (locals())**== 来查看该函数体内的所有变量名和变量值。4.参数:
在globals和locals两个参数为空时,很好理解,expression就是一个str的表达式。eval()此时得到的就是该表达式的结果。
当locals参数为空,globals参数不为空时,先查找globals参数中是否存在变量,并计算。当两个参数都不为空时,先查找locals参数,再查找globals参数。5.关于locals和globals两个参数的例子:5.1 传递全局变量:print(eval("{"age":29,"name":name}",{"name":"小白piao"})) #输出结果:{"age": 29, "name": "小白piao"}5.2 传递局部变量:age = 29 print(eval("{"name":name,"age":age}",{"name":"小白piao"},locals())) #输出结果为:{"name": "小白piao", "age": 29}