Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104507
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-16 09:51
个人简介

啄木鸟专吃虫,故名啄木鸟。

分类: Python/Ruby

2014-06-04 17:32:49

首先来点特殊的:如何将一个字符串(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




阅读(210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~