python进阶之函数式编程

高阶函数

#高阶函数
#高阶函数概念:可以将其他函数作为参数或者返回结果的函数。
def lazy(*args):
    def sum():
        ax=0
        for n in args:
            ax=ax+n
        return ax
    return sum
lazy(1,2,3)()
'''在这个例子中lazy()中又定义了函数sum()
因为lazy的返回值是函数sum
所以在执行lazy的时候只是起到了把参数传递到了sum上面
故而必须再次调用函数就能得到结果ax'''

'''值得注意的是每次调用一次lazy都会产生一个新的函数sum1,sum2......
即使传入的参数相同他们也不相等'''
6

next的用法

#next:只返回一个值,多次调用继续往下读取,作用于迭代器
#注意第一步对迭代器进行命名不能省略,可以比较一下前3行和后两行体会一下差别
i=enumerate([2,2,3])
print(next(i))
print(next(i))
print(next(i))
it=iter([3,3,2])
print(next(it))
print(next(it))
print(next(it))
print(next(enumerate([2,2,3])))
print(next(enumerate([2,2,3])))
(0, 2)
(1, 2)
(2, 3)
3
3
2
(0, 2)
(0, 2)

函数式编程

'''
函数式编程的常用函数
map
reduce
filter
zip
sorted
'''
from functools import reduce
list1=[2,4,6,8]
print(next(map(lambda x:x**2,list1)))
print(reduce(lambda x,y:x+y,list1))#需要序列间前后的关系进行运算,所以需要两个位置x,y。返回的是也给数值
print(next(filter(lambda x:x%2==0,list1)))#对满足条件的进行保留,不满足的去掉
print(sorted(list1,key=abs,reverse=True))#从大到小排列
list2=[3,4,5]
k=zip(list1,list2)
print(next(k))
print(next(k))
for i in zip(list1,list2):
    print(i)
4
20
2
[8, 6, 4, 2]
(2, 3)
(4, 4)
(2, 3)
(4, 4)
(6, 5)
#普通编程与函数式编程
l=[2,-6,11,7,-9,65,-37,44,6,3,-18]
sum=0
for i in l:
    if i>0:
        sum+=i
print(sum)
138
from functools import reduce
pn=filter(lambda x:x>0,l)
sum=reduce(lambda x,y:x+y,pn)
print(sum)
138
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值