• python 装饰器


    装饰器:

    本质是函数,装饰其他函数,就是为其他函数添加附加功能

    函数即“变量”

    要求:

    1  不能修改被装饰的函数的源代码

    2  不能修改悲壮是的函数的调用方式

    高阶函数

     a  把一个函数名当做实参传给另个一函数(可以做到在不修改源代码的情况下给函数添加附加功能)

      

    def bar():
        print('in the bar ')
    def test1(fun):
        print(fun)
        fun()       # 实际上就是执行bar函数
    test1(bar)    把一个函数的名当做实参传给另个一个函数

         首先定义了bar()函数,定义了一个形参为fun的函数test1,然后在执行test1的时候,实参为bar,在test1函数中,bar赋值给了fun,fun如果不加括号,fun就表示的是bar的函数所在的内存地址,如果加上括号fun(),则表示调用函数bar()

    b  返回值中包含函数名(比修改函数的调用方式)

      

    def bar():
        print(" in the bar")
    def test1():
        print(fun)
      fun()
    return fun # 返回值中包含函数名 bar = test1(bar) # 将函数test1返回值用变量bar接收 bar()

       在这段代码中,先定义bar函数,然后再调用test函数时,将bar函数的内存地址当做实参传给fun,在fun中就实现了bar的功能,并返回bar的内存地址,也就是fun的内存地址,然后将这个内存地址再赋值给变量bar,最后在使用bar(),这样达到了偷天换日的目的。

    嵌套函数

    函数嵌套 在函数func内
    def func():
      print(3)
      def f():
        print(1)
        print(2)
      f()
    func()

    函数嵌套就是在函数中,再定义一个函数

    高阶函数+嵌套函数 ==》装饰器

    import time
    
    def auth(auth_type): #用来接收@装饰器,传送过来的参数
    def wapper(fun):
    def timmer(*args,**kwargs): #使用这种参数表示接受所有参数
    if auth_type == 'local':
    start_time = time.time()
    fun(*args,**kwargs) #使用这种参数表示接受所有参数
    end_time = time.time()
    print("in the fun time :%s" %(end_time -start_time))
    return timmer # 传回返回值
    return wapper
    
    
    @auth(auth_type='local') #test1 = timmer(),将参数转给auth装饰器
    def test1():
    time.sleep(3) # 等待三秒,再执行
    print("in the test1")
    test1() #将参数传给timmer装饰器 auth定义一个大范围,这里的参数局决定函数执行结果
    View Code
  • 相关阅读:
    2019安徽省程序设计竞赛 I.你的名字(序列自动机)
    poj3522Slim Span(暴力+Kruskal)
    Uva1349Optimal Bus Route Design(二分图最佳完美匹配)(最小值)
    基于Python的Web应用开发实战——3 Web表单
    [nRF51822]5.触摸按键
    [nRF51822]4.GPIO控制蜂鸣器
    [nRF51822]3. GPIO输入按键检测
    [nRF51822]2. 跑马灯
    [nRF51822]1. 点亮一个LED
    [nRF51822]0.nRF51822的开发环境
  • 原文地址:https://www.cnblogs.com/mk-lovefreedom/p/10559502.html
Copyright © 2020-2023  润新知