python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况
 
any
any(iterable)

Return True if any element of the iterable is true. If the iterable is empty, return False

如果序列中任何一个元素为True,那么any返回True。该函数可以让我们少些一个for循环。有两点需要注意

(1)如果迭代器为空,返回的是False
(2)具有短路求值性质,即如果迭代器中某个元素返回True,那么就不会对后面的元素求值。
    笔者曾经犯过这么一个错误
    ret = any(self.calc_and_ret(e) for e in elements)
    def self.calc_and_ret(self, e):
        # do a lot of calc here which effect self
        return True(or False)
    本意是希望对所有的element都计算,然后返回一个结果。但事实上由于短路求值, 可能后面很多的元素都不会再调用calc_and_ret
 
all
all(iterable)

Return True if all elements of the iterable are true (or if the iterable is empty

当所有元素都为True时,all函数返回True。两点注意

(1)如果迭代器为空,返回的是True
(2)具有短路求值性质,即如果迭代器中某个元素返回False,那么就不会对后面的元素求值。
 
sum
sum(iterable[, start])

Sums start and the items of an iterable from left to right and returns the total. start defaults to 0.

sum用来对迭代器的数值求和,且可以赋予一个初始值(默认为0)。注意

(1)如果是空的迭代器,返回0
 
max min
分别返回可迭代序列的最大值 最小值。注意事项
(1)如果是空的迭代器,会抛异常(ValueError)
 
zip
接受n个序列作为参数,返回tuple的一个列表,第i个tuple由每个序列的第i个元素组成。for example
>>> zip((1,2,3), ('a', 'b', 'c'))
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> zip((1,2,3), ('a', 'b', 'c'), (True, False, True))
[(1, 'a', True), (2, 'b', False), (3, 'c', True)]
注意:
(1)作为参数的序列长度可以不一致,以长度最短的序列为准。for example
>>> zip((1,2,3), ('a', 'b'))
[(1, 'a'), (2, 'b')]
(2)即使参数只有一个序列,返回值也是a list of tuple
>>> zip((1,2,3))
[(1,), (2,), (3,)]
 
itertools.izip
功能能zip,不过返回值是iterator,而不是list
 
enumerate
这个函数大家应该都有使用过,用来返回序列中元素的下标和元素。同时容易被忽略的是:enumerate 还接受一个参数作为下标的开始
enumerate(sequence[, start=0])

我们知道在Python以及大多数编程语言中,数组(序列)的下标都是以0开始(lua除外)。但在现实中,比如排行,我们都是说第一名,而不是第0名。所以start=1可能是个好主意。

>>> for idx, e in enumerate(('a', 'b', 'c'), 1):
...     print idx, e
...
1 a
2 b
3 c

最新文章

  1. 排序算法总结第二弹----冒泡排序---javascript描述
  2. iOS程序逆向Mac下常用工具——Reveal、HopperDisassemble、IDA
  3. <<< 网页中如何利用原生js和jquery储存cookie
  4. java.lang.Comparable<T> 接口
  5. .net中excel遇到的一些问题
  6. 转:MyBean简介
  7. [JSP]用户注册
  8. J2EE MyBatis使用
  9. (转) Tomcat部署Web应用方法总结
  10. 自定义TreeList单元格 z
  11. C语言头文件的使用与写法
  12. Android中 判断是平板还是手机
  13. 利用MyEclipse的ant插件生成Hibernate的映射文件
  14. 基于.NET Core的Hypertext Application Language(HAL)开发库
  15. 清理我的 Mac
  16. x86-64栈帧中的“红色区域” red zone of stack frame on x86-64
  17. vue-cli项目使用mock数据的方法(借助express)
  18. Maven替换为国内仓库
  19. C# wnform 请求http ( get , post 两种方式 )
  20. MemoryFile偷取安卓内存

热门文章

  1. CYQ.Data、ASP.NET Aries 百家企业使用名单
  2. TechEmpower 13轮测试中的ASP.NET Core性能测试
  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入
  4. 立即执行函数表达式(IIFE)
  5. 数据图表插件Echarts(一)
  6. bzoj3932--可持久化线段树
  7. 微信小程序开发日记——高仿知乎日报(上)
  8. SQL中字符串拼接
  9. [Django]用户权限学习系列之权限管理界面实现
  10. 关于Hadoop用户体系的设想(胡思乱想)