Lesson 10 函数下

1. 高阶函数

  • 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
    例子:
 def fun(n):
     if n % 2 == 0:
         return True

 list1 = [1,2,3,4,5,6,7,8,9,10]
 def fun1(f):
     list2 = []
     for i in list1:
         if f(i):
             list2.append(i)

     return list2

 a = fun1(fun)
 print(a)

2.匿名函数

# lambda
res = lambda a,b:a**b
print(res(2,5))
res = (lambda a, b: a + b)(1, 2)
print(res)
# filter()
list1 = [1,2,3,4,5,6,7,8,9,10]
def fun(n):
    if n % 2 == 0:
        return True

print(list(filter(fun,list1)))

3.闭包

  • 将函数作为返回值也是高阶函数我们也称为闭包
  • 闭包的好处
    • 通过闭包可以创建一些只有当前函数能访问的变量
    • 可以将一些私有数据藏到闭包中
  • 行成闭包的条件
    • 函数嵌套
    • 将内部函数作为返回值返回
    • 内部函数必须要使用到外部函数的变量
      例子:
def fun(n1):
    def fun1(n2):
        r = n1 + n2
        print(r)
    return fun1

a = fun(2)
a(4)

4.装饰器

  • 装饰器是一个特殊的闭包,符合闭包的三大构成条件。
def add(a, b):
    return a+b

def qiu():
    print(123)

def fun(fn,*args,**kwargs):
    print('STAET')
    r = fn(*args, **kwargs)
    print('EDN')
    return r

print(fun(add,5,7))
# 装饰器语法糖的写法
def fun(fn):
    def fun1(*args,**kwargs):
        print('STAET')
        r = fn(*args, **kwargs)
        print('EDN')
        return r
    return fun1

@fun
def qiu():
    print(123)
qiu()

@fun
def add(a, b):
    return a + b


print(add(1, 2))

作业

# 1. 请使用装饰器实现已存在的函数的执行所花费的时间。
import time

def dce_out(fn):
    def dce_inner(*args,**kwargs):
        time_start = time.time()
        r = fn(*args,**kwargs)
        time_end = time.time()
        print(time_end - time_start)
        return r
    return dce_inner

@dce_out
def add(a,b):
    time.sleep(1)
    return a*b
d = add(6,2)
print(d)

@dce_out
def li():
    i = 0
    while i < 10000:
        i += 1
        time.sleep(0.0)
    return i
li()


@dce_out
def test():
    print("test")
    time.sleep(1)

test()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值