python学习-函数式编程常用的函数、闭包和递归函数、迭代器和生成器

(1)lambda表达式
①lambda函数:lambda表达式的函数体只能有唯一的一条语句,也就是返回值表达式语句。
语法:返回函数名=lambda 参数列表:函数返回值表达式语句

sum=lambda x,y,z:x+y+z

②lambda表达式序列:
语法:序列=[(lambda 表达式1),(lambda 表达式2),……]

arr=[(lambda x:x**2),(lambda x:x**3),(lambda x:x**4)]

③将lambda表达式作为函数的返回值

def math(o):
     return lambda x,y:x+y

(2)map函数
①map函数用于将指定序列中的所有元素作为参数调用指定函数,并将结果构成一个新的序列返回
语法:结果序列=map(映射函数,序列)

arr=map(lambda x:x**2,[1,2,3])#计算序列中各数的平方

②在map函数中可以有多个序列,这取决于映射函数参数的个数

arr=(lambda x,y:x+y,[1,2,3],[4,5,6])

(3)filter函数:可以对指定序列进行过滤操作
语法:filter(函数function,序列sequence)
filter函数以序列参数sequence中的每个元素为参数调用function函数,调用结果为true的元素最后将作为filter函数的结果输出

def function(x)
      return x%2==0
arr=filter(function,[1,2,3])

(4)reduce函数:将指定的序列中的所有元素作为参数,按一定的规则调用指定函数
语法:计算结果=reduce(映射函数,序列)
从3.0以后,reduce不被集成在内置函数中,需要使用from functools import reduce来引用functools模块,才能调用

from functools import reduce
def myadd(x,y)
     return x+y
sum=reduce(myadd,(2,3,4))#计算这三个数的和

(5)zip函数:以一系列列表作为参数,将列表中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

a=[1,2,3]
b=[3,4,5]
zipped=zip(a,b)
for element in zipped:
     print(element)

如果传入参数的长度不等,则返回列表的长度与参数中长度最短的那一个相同
将打包结果前面加上*,并以此为参数调用zip函数,可以将打包结果解压

a=[1,2,3]
b=[3,4,5]
zipped=zip(a,b)
unzipped=zip(*zipped)
for element in unzipped:
     print(element)

闭包指函数的嵌套;递归函数指直接或者间接调用函数本身的函数

迭代器是访问序列内元素的一种方式,迭代器对象从序列的第一个元素开始访问直到所有的元素都被访问一遍后结束,迭代器不能回退,只能往前进行迭代
(1)iter函数:可以获取序列的迭代器对象
语法:迭代器对象=iter(序列对象)
使用next可以获取迭代器的下一个元素
语法:next(迭代器对象)

list=[1,2,3]
it=iter(list)
print(next(it))
print(next(it))
print(next(it))

(2)enumerate函数:将列表或元组生成一个有序号的序列

list=[1,2,3]
for index,val in enumerate(list)
   print('第%d个元素是:%s'%(index+1,val))

生成器:特点:生成器函数都包含一个yield语句,当执行到yield语句时返回;生成器函数可以记住上一次返回时在函数体中的位置,对生成器函数的下一次调用跳转至函数中间,而上次调用的所有局部变量都保持不变

def addlist(alist)
    for i in alist:
       yield i+1
alist=[1,2,3]
for x in addlist(alist):
      print(x)

生成器的返回值有一个__next__方法,它可以恢复生成器执行,直到下一个yield表达式处

def addlist(alist)
    for i in alist:
       yield i+1
alist=[1,2,3]
x=addlist(alist)
x=x.__next__()
print(x)
发布了23 篇原创文章 · 获赞 1 · 访问量 3243
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览