标签:原则 表示 元素 red 参数 面向过程 对象 依次 过程
一、函数式编程概念简介
二、高阶函数
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算(结果作为第二次调用的第一个参数)filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素sorted()函数可以对list进行排序,同时也是一个高阶函数,可以接收一个key函数来实现自定义的排序:key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序三、返回函数(调用函数会返回一个函数)
示例参考:
#返回的函数并没有立刻执行,而是直到调用了f()才执行 def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() 结果:全部都是9!原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9 #f(i)立刻被执行 def count(): def f(j): def g(): return j*j return g fs = [] for i in range(1, 4): fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f() return fs 结果:1,4,9
#计数器
def createCounter():
def num():
n = 1
while True:
yield n
n = n+1
g = num() #此处num()是一个generator
def counter():
return next(g)
return counter
优化测试:
def createCounter():
def num():
n = 1
while True:
yield n
n = n+1
def counter():
return next(num())
return counter
此处运行的结果始终为1,不会递增
原因:使用g=num(),g是一个变量,是值传递,函数是内存地址传递!!!
四、匿名函数
lambda表示匿名函数,冒号前面的x表示函数参数return,返回值就是该表达式的结果标签:原则 表示 元素 red 参数 面向过程 对象 依次 过程
原文地址:https://www.cnblogs.com/jayce9102/p/12188328.html