函数式编程
Posted waynew
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程相关的知识,希望对你有一定的参考价值。
高阶函数
传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称为高阶函数
def add(x, y, f):
return f(x) + f(y)
print(add(-3,5,abs))
map/reduce
map(func, *iterables) --> map object
Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.
map()接收两个参数,一个是函数,一个是Iterbale,map将传入的函数依次作用于序列的每个元素,并把结果作为新的Iterator返回
def f(x):
return x * x
r = map(f, [1,2,3,4,5])
list(r)
把list所有数字转为字符串
list(map(str, [1,2,3,4,5]))
reduce
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value.For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty.
reduce()接收两个参数,函数和序列,其中函数也要有两个参数,reduce把结果和序列剩下的部分依次进行计算,效果就是
reduce(f,[x1,x2,x3,x4,x5])=f(f(f(f(x1,x2),x3),x4),x5)
如求和
from functools import reduce
def add(x,y):
return x+y
reduce(add,[1,2,3,4,5])
把序列变换成整数
from functools import reduce
def fn(x,y):
return x * 10 + y
reduce(fn,[1,2,3,4,5])
把str转换成int
from functools import reduce
def fn(x,y):
return x * 10 + y
def chr2num(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
reduce(fn, map(chr2num,'12345'))
整理成str2int的函数
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
def fn(x, y):
return x * 10 + y
def chr2num(s):
return DIGITS[s]
return reduce(fn, map(chr2num, s))
用lambda函数精简
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def chr2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(chr2num, s))
以上是关于函数式编程的主要内容,如果未能解决你的问题,请参考以下文章