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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值