Python基础- 函数式编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础- 函数式编程相关的知识,希望对你有一定的参考价值。
Python中内置的三个函数与序列一起使用非常有用:filter(), map()和reduce()。
1.filter(function, sequence)
filter()
的作用是从一个序列中筛出符合条件的元素。
filter()
也接收一个函数和一个序列,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
由于filter()
使用了惰性计算,所以只有在取filter()
结果的时候,才会真正筛选并每次返回下一个筛出的元素。
例如得到能被3或者5整除的数
def f(x): return x % 3 == 0 or x % 5 == 0 print filter(f, range(2, 25)) # [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
例如删掉一个序列中的空字符串
def not_empty(s): return s and s.strip() print filter(not_empty, [‘A‘, ‘B‘, ‘ ‘, ‘C‘, None, ‘D‘]) # [‘A‘, ‘B‘, ‘C‘, ‘D‘]
2.map(function, sequence)
map
将传入的函数依次作用到序列的每个元素,并把结果返回
def cube(x): return x*x*x print map(cube, range(1, 11)) # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] seq = range(8) def add(x, y): return x+y print map(add, seq, seq) # [0, 2, 4, 6, 8, 10, 12, 14]
还可以利用,map将一组数字转化为字符串
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # [‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘]
3.reduce(function, sequence)
这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
例如,求1到100的和,就可以用reduce实现
def add(x,y): return x+y print reduce(add, range(1, 101)) # 5050
用这种方式来得到序列的和,如果序列为空时,就会抛出异常。为了避免抛出异常,可以用下面的方式
def sum(seq): def add(x,y): return x+y return reduce(add, seq, 0) print sum(range(1, 11)) # 55 print sum([]) # 0
以上是关于Python基础- 函数式编程的主要内容,如果未能解决你的问题,请参考以下文章