高阶函数
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的用法
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))
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