首先来点特殊的:如何将一个字符串(string)转为字典(dict)呢?
其实也很简单,只要用 eval()或exec() 函数就可以实现了。
>>> a = "{'a': 'hi', 'b': 'there'}" >>> b = eval(a) >>> b {'a': 'hi', 'b': 'there'} >>> exec ("c=" + a) >>> c {'a': 'hi', 'b': 'there'}
exec执行字符串中的语句
execfile:用来执行文件
eval:计算字符串的表达式
1.未加参数情况下执行当前代码:
>>> exec 'a = 2*3'
>>> a
6
2.如果在表达式之后使用in指定一个dic,它将作为global和local变量作用域:
>>> a = 10
>>> b = 20
>>> g = {'a':6,'b':9}
>>> exec 'global a;print a,b'
10 20
>>> exec 'global a;print a,b' in g
6 9
3.如果在表达式之后使用in指定2个dic,它将分别作为global和local的作用域:
>>> a = 10
>>> b = 20
>>> c = 30
>>> g = {'a':1,'b':2}
>>> l = {'b':3,'c':4}
>>> exec "global a;print a,b,c"
10 20 30
>>> exec "global a;print a,b,c" in g,l
1 3 4
4.exec后接tuple的情况:
exec(expr,globals)#相当于exec expr in globals
exec(expr,globals,locals)相当于exec expr in globals,locals
5.
eval(expression[, globals[, locals]])
有三个参数,表达式字符串,globals变量作用域,locals变量作用域。
其中第二个和第三个参数是可选的。如果忽略后面两个参数,则eval在当前作用域执行。
>>> a = 10
>>> b = 20
>>> c = 30
>>> g={'a':6,'b':8}
>>> l={'b':9,'c':10}
>>> eval("a+1")
11
>>> eval("a+1",g)
7
>>> eval("a+b+c",g,l)
25
阅读(237) | 评论(0) | 转发(0) |