result3=map(lambda a,b:a+b,[1,5,9,7],[5,6,7])
print(list(result3))
#结果[6, 11, 16]
reduce函数格式 其实就是把fuction的结果当作一个参数跟下一个参数去执行function,有点类似递归
reduce(function,sequence,initial=None)
from functools import reduce
def area(a,b):
print(a,b)
return a*b
print(reduce(area, [1, 2, 3, 4,5]))
#结果:120
#用lambda
print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5]))
#结果:120
# 2为初始值 那么 x初始值就是2 y就是1 (第一个参数就是初始值)
print(reduce(lambda x, y: x * y, [1, 2, 3, 4, 5],2))
结果:240
filter函数的基本格式就是过滤 满足条件的就留下
filter(function_or_None, iterable)
print(list(filter(lambda x: x % 2 == 0, range(100))))
#sorted从字面上就可以看去这是个用来拍序的函数,sorted 可以对所有可迭代的对象进行排序操作
#sorted(iterable, key=None, reverse=False) 参数1:需要迭代的对象,
# key作为比较的对象(指的是迭代对象中),reverse 默认为false为升序
print(sorted([1, 8, 7, 6, 9, 1, 3]))
print(sorted([['dd', 56], ['cc', 88]], key=lambda x: x[1]))
闭包 把函数作为返回值,会把函数里面用的参数带出来 ,
如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包
闭包必须嵌套在一个函数里,必须返回一个调用外部变量的函数对象,才是闭包
def add():
n=2
def li(x):
return x**n
return li
p=add()
print(type(p))
print(p(4))
嵌套函数
def news():
age=16
def name():
print(age)
return name() #返回该内部函数
print(type(news()))
def news():
age=18
def name():
print(age)
return name #return内层函数时不加括号,只返回函数的地址:
print(news())
#结果<function news.<locals>.name at 0x0000018DEE02B948>
def too():
n=2
def thr(x):
nonlocal n #闭包下 内部函数不能直接修改外部函数的变量值,需要加nonlocal
n+=1
return x**n
return thr
p=too()
print(p(10))
结果1000
def add():
n=2
l=[]
for i in range(1,3): #当内部函数获取外部函数的变量不确定时,会取最后一个
def too():
return i**n
l.append(too)
return l
f,e=add()
print(f())
print(e())
#装饰器
#装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
import time
# start=time.time()
# time.sleep(4)
# end=time.time()
# print(end-start)
def names(news):
def too():
start = time.time()
time.sleep(4)
print("篮球")
news()
end = time.time()
print(end - start)
return too
@names
def news():
print("小明")
news()
python 函数式编程 reduce ,filter,sorted,闭包,装饰器
最新推荐文章于 2024-11-12 23:15:59 发布