python 中 eval函数,exec与eval对不

来源:互联网 发布:车险计算软件 编辑:程序博客网 时间:2024/06/06 20:45

eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果。所以,结合math当成一个计算器很好用。

eval()函数常见作用有: 
1、计算字符串中有效的表达式,并返回结果

>>> eval('pow(2,2)')4>>> eval('2 + 2')4>>> eval("n + 4")85
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2、将字符串转成相应的对象(如list、tuple、dict和string之间的转换)

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]">>> b = eval(a)>>> b[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]>>> a = "{1:'xx',2:'yy'}">>> c = eval(a)>>> c{1: 'xx', 2: 'yy'}>>> a = "(1,2,3,4)">>> d = eval(a)>>> d(1, 2, 3, 4)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、将利用反引号转换的字符串再反转回对象

>>> list1 = [1,2,3,4,5]>>> `list1`'[1, 2, 3, 4, 5]'>>> type(`list1`)<type 'str'>>>> type(eval(`list1`))<type 'list'>>>> a = eval(`list1`)>>> a

[1, 2, 3, 4, 5]【2】通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec不返回结果,print(eval("…"))打印None);

复制代码代码如下:
   >>> exec("print(\"hello, world\")")hello, world

>>> a = 1>>> exec("a = 2")>>> a2

这里有个scope(命名空间,作用域)的概念,为了不破坏现在的scope,可以新建一个scope(一个字典)执行exec(Javascript没有此功能):

复制代码代码如下:
>>> scope = {}>>> exec("a = 4", scope)>>> a2>>> scope['a']4   >>> scope.keys()dict_keys(['a', '__builtins__'])

__builtins__包含了所有的内建函数和值;

而普通的{}不会包含__builtins__

复制代码代码如下:
>>> a = {}>>> a.keys()dict_keys([])

同exec一样,eval也可以使用命名空间:

复制代码代码如下:
>>> result = eval('2+3')>>> result5>>> scope={}>>> scope['a'] = 3>>> scope['b'] = 4>>> result = eval('a+b',scope)>>> result7
0 0