Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1879424
  • 博文数量: 333
  • 博客积分: 10791
  • 博客等级: 上将
  • 技术积分: 4314
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-08 07:39
文章分类

全部博文(333)

文章存档

2015年(1)

2011年(116)

2010年(187)

2009年(25)

2008年(3)

2007年(1)

分类: Python/Ruby

2011-06-20 16:08:31

关于 "_" 
是一个非常有用的功能,但是却很少有人知道。 
当你在交互式模式下( IDEL)计算一个表达式或调用一个函数后,其结果必然是一个临时名称,_(下划线): 

Python代码   

1.  >>> 1 + 1  

2.  2  

3.  >>> _  

4.  2  


_ 中存储最后输出的值。 
当输出的结果是 None 或没有任何输出时,而 _ 的值并不会改变,仍然保存上一次的值。这就是方便所在。 
当然,这只能交互式的模式中使用,在模块中不能支持。 
这在交互式模式中是非常有用的,当你在过程中没有保存计算结果 你想看最后一步的执行的输出结果: 

Python代码   

1.  >>> import math  

2.  >>> math.pi / 3  

3.  1.0471975511965976  

4.  >>> angle = _  

5.  >>> math.cos(angle)  

6.  0.50000000000000011  

7.  >>> _  

8.  0.50000000000000011  


创建String: 从列表中创建 
开始定义一个 string  列表:

Python代码   

1.  colors = ['red''blue''green''yellow']  

当我们需要将上面的列表连接成一个字符串。尤其当 list 是一个很大的列表时.... 
不要这样做: 

Python代码   

1.  result = ''  

2.  for s in colors:  

3.      result += s  

这种方式效率非常低下的,它有可怕的内存使用问题,至于为什么,如果你是 javaer 的话,其中的 string 连接,我想你并不陌生。 
相反,你应该这样做: 

Python代码   

1.  result = ''.join(colors)  


当你只有几十或几百个string项连接时,它们效率上并不会太大的差别。但你要在养成写高效代码的习惯,因为当字符串数千时,join 比起 for 连接性能会能有所提升。 

如果你需要使用一个函数来生成一个字符串列表,同样可以使用:

Python代码   

1.  result = ''.join(fn(i) for i in items)  

尽可能的使用 
Good:

Python代码   

1.  for key in d:  

2.      print key  

 

·         使用 in 一般情况下是非常快的。

·         这种方式也适用于其它的容器对象(如 listtuple set)。

·         in 是操作符(正如上面所看到的)


Bad: 

Python代码   

1.  for key in d.keys():  

2.      print key  


保持与上面的一致性,使用 use key in dict 方式,而不是 dict.has_key(): 

Python代码   

1.   # do this:  

2.  if key in d:  

3.      ...do something with d[key]  

4.    

5.  # not this:  

6.  if d.has_key(key):  

7.      ...do something with d[key]  

字典中的 get 函数 
我们经常需要在字典中初始化数据: 
以下是不好的实现方法: 

Python代码   

1.  navs = {}  

2.  for (portfolio, equity, position) in data:  

3.      if portfolio not in navs:  

4.          navs[portfolio] = 0  

5.      navs[portfolio] += position * prices[equity]  


使用dict.get(key, default) 删除 if 判断代码: 

Python代码   

1.  navs = {}  

2.  for (portfolio, equity, position) in data:  

3.      navs[portfolio] = (navs.get(portfolio, 0)  

4.                         + position * prices[equity])  

这种方式更为直接。 

字典中的 setdefault 函数 (1) 
当我们要初始化一个可变字典的值。每个字典的值将是一个列表。下面是不好的做法: 
初始化可变字典的值: 

Python代码   

1.  equities = {}  

2.  for (portfolio, equity) in data:  

3.      if portfolio in equities:  

4.          equities[portfolio].append(equity)  

5.      else:  

6.          equities[portfolio] = [equity]  


通过 dict.setdefault(key, default) 使这段代码工作的更好

Python代码   

1.  equities = {}  

2.  for (portfolio, equity) in data:  

3.      equities.setdefault(portfolio, []).append(  

4.                                           equity)  


dict.setdefault()等同于“ get, or set & get“ "如果没有,就设置";  如果你的字典Key是复杂的计算或long类型,使用 setdefault 是特别有效的。

字典中的 setdefault 函数 (2) 
在我们看到的setdefault字典方法也可以作为一个独立的语句使用: 

Python代码   

1.  avs = {}  

2.  for (portfolio, equity, position) in data:  

3.      navs.setdefault(portfolio, 0)  

4.      navs[portfolio] += position * prices[equity]  


我们在这里忽略了字典的setdefault方法返回的默认值。我们正利用的setdefault中的作用,仅仅只是在dict中没有 key 的值的时候才会设置。 


阅读(640) | 评论(0) | 转发(0) |
0

上一篇:python学习

下一篇:python学习(续4)

给主人留下些什么吧!~~