1.itertools
# 注意imap()返回一个迭代对象,而map()返回list。当你调用map()时,已经计算完毕:
>>> r = map(lambda x: x*x, [1, 2, 3])
>>> r # r已经计算出来了
[1, 4, 9]
# 当你调用imap()时,并没有进行任何计算:
>>> r = itertools.imap(lambda x: x*x, [1, 2, 3])
>>> r
<itertools.imap object at 0x103d3ff90>
# r只是一个迭代对象
# 必须用for循环对r进行迭代,才会在每次循环过程中计算出下一个元素:
>>> for x in r:
... print x
imap()实现了“惰性计算”,也就是在需要获得结果的时候才计算。类似imap()这样能够实现惰性计算的函数就可以处理无限序列:
2.functools
定义一些高阶函数,用于“act”或者“return”其他函数。前边已经介绍过其中的一个函数reduce了。这里再介绍一个平时常用的partial函数
print(int("10010", base=2)) # 18
int_base_2 = partial(int, base=2) # partial可以给函数添加或更改默认参数
print(int_base_2("10010")) # 18
3.operator模块
提供了一个与Python固有操作相对应的集合。例如operator.add(x, y)等价于表达式x+y。该模块中函数的名字就是类的方法名。这里可以结合map、reduce等使用:
print(reduce(lambda x, y: x+y, range(10))) # 45
print(reduce(add, range(10))) # 45
说点什么
欢迎讨论