python 函数式编程 reduce ,filter,sorted,闭包,装饰器

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值