Python函数式编程—内置模块

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

Written by

说点什么

欢迎讨论

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒