• day11 初识装饰器


    1闭包复习

    #函数名 就是一串内存地址 可以赋值 可以作为容器类型的元素 、函数的参数和 返回值 第一类对象
    # 闭包
    def outer():
        a=1
        def inner():
            print(a)
        return inner
    i=outer()
    i()
    <<<
    1

    2作业讲解

    #2.写函数接收n个数字求这些参数数字的和
    def sum_fun(*args):
        total=0
        for i in args:
            total+=i
        return total
    print(sum_fun(1,2,8))
    <<<
    11
    #读代码 回答代码中打印出来的abc分别是什么 为什么
    a=10
    b=20
    def test5(a,b):
        print(a,b)
    c=test5(b,a)
    print(c)             #20,10
    
    b=20
    a=13
    def test5(a,b):
        a=3
        b=5
        print(a,b)
    c=test5(b,a)
    print(c)             #3,5  内部有就不跟上级要了
    <<<
    20 10
    None
    3 5
    None

    time 模块

    import time
    print(time.time()) #返回当前时间的时间戳(1970纪元后经过的浮点秒数)1544769062.0091138
    time.sleep(3) #让程序执行到这个位置时停一会
    print('111')
    <<<
    1544773092.0564687
    111

    3初识装饰器

    1.装饰器

    '''装饰器的作用:不想修改函数的调用方式,但是还想在原来的函数前后添加功能
    原则:开放封闭原则  开放对拓展是开放的 对修改是封闭的
    语法糖@
    装饰器的固定模式'''
    
    #timemer就是一个装饰器函数 只是对一个函数有一些装饰作用
    import time
    def timmer(f):           #装饰器函数
        def inner():
            start=time.time()
            ret=f()          #被装饰的函数
            end=time.time()
            print(end-start)
            return ret
        return inner
    
    @timmer  #语法糖@ 装饰器函数名
    def func(): #被装饰的函数
        time.sleep(0.01)
        print("老板好")
        return '新年好'
    #func=timemer(func)  #有了@timmer 就不用这一行了
    ret=func()
    print(ret)
    
    <<<
    老板好
    0.015593528747558594
    新年好

    2.封板

    #封板
    def outer():
        def inner():
            print('kkk')
            return 'inner'
    
        print('lll')
        return inner()
    print(outer())
    
    <<<
    lll
    kkk
    inner

    3.装饰带参数函数的装饰器

    #装饰带参数函数的装饰器
    import time
    def timmer(f):
        def inner(*args,**kwargs):
            start=time.time()
            ret=f(*args,**kwargs)
            end=time.time()
            print(end-start)
            return ret
        return inner
    @timmer
    def func(a,b):
        time.sleep(1)
        print('老板好',a,b)
        return '新年好'
    #func=timmer(func)
    ret=func(1,2)  #inner(1,2)
    ret1=func(1,b=3)  #inner(1,2)
    print(ret,ret1)
    <<<
    老板好 1 2
    1.0005967617034912
    老板好 1 3
    1.0001435279846191
    新年好 新年好

    4.装饰器的固定模式

    #装饰器的固定模式
    import time
    def wrapper(f):   #wrapper是装饰器函数 f是被装饰的函数
        def inner(*args,**kwargs):
            '''在被装饰函数之前要做的事'''
            ret=f(*args,**kwargs)
            '''在被装饰函数之后要做的事'''
            return  ret
        return inner
    @wrapper       #相当于func=wrapper(func)
    def func(a,b):
        time.sleep(1)
        print('hhhh',a+b)
        return '666'
    print(func(1,5))   #相当于inner(1,5)
    
    <<<
    hhhh 6
    666
    def wrapper():
        def inner():
            pass
        return inner
  • 相关阅读:
    Python——数据类型之list、tuple
    Python——数据类型初步:Numbers
    Python——初识Python
    Python——开篇之词
    PAT——乙级1028
    PAT——甲级1009:Product of Polynomials;乙级1041:考试座位号;乙级1004:成绩排名
    PAT——甲级1065:A+B and C(64bit) 乙级1010一元多项式求导
    PAT——甲级1046S:shortest Distance
    PAT——甲级1042:Shuffling Mashine
    特征值和特征向量
  • 原文地址:https://www.cnblogs.com/hi-python/p/10119812.html
Copyright © 2020-2023  润新知