• python装饰器


    定义:

    装饰器本质是函数,装饰器的功能是装饰其它函数的(添加附加功能),

    原则:

    1.不能修改被装饰的函数。

    2 不能修改被装饰的函数的调用方式。

     实现装饰器的知识储备

    1、函数即变量

    2、高阶函数

    3、嵌套函数

    函数即变量

    定义一个函数以后,跟字符串的定义是一样的,存在内存中的某一个空间内,函数体就是一个字符串(调用的时候函数名加一个括号会立即执行里面的代码,基于内存地址做调用)。这个空间地址就给个函数名,相当与一个房间的门牌号。

    那与之对应的就是回收机制。一些没有用的变量会及时的释放空间。

    当某个空间的引用次数为0的时候,那么这个空间会被回收。

    比如 x=1 那么1被x引用一次。

    del x 把x删除了其实是把1的引用删除了,那么1的空间会被回收。

    如果没有删除x 那么就会等程序结束在删除x的引用空间。

     高阶函数

    a:把一个函数名当作实参传给另一个函数

    DEMO:

     

    调用bar函数:

    b:返回值中包含函数名

    有内存地址的意义就是加上括号就能运行。

    嵌套函数

     

    计算两个函数的 运行时间

    不修改函数调用方式:

    但是这样太麻烦了,并且调用test1之前把地址修改了。如果直接调用test1而且不用修改要怎么做?

    python有个内置语法,定义如下

    #@装饰器名称 写在要装饰的函数的上面 等于 test1 = timer(test1)的操作
    #要调用的函数名称
    @timer
    test1()
    

     

    得出一个结果,在需要用到装饰器的函数的上面要写@装饰器名称,如果两个函数要用到就要在每个函数上面写一次。

    优化版:

    demo:模拟网站登录,首页不需要登录,其它页面要登录。

  • 相关阅读:
    [2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改
    [2019.2.13]BZOJ4318 OSU!
    [2019.1.17]BZOJ1066 [SCOI2007]蜥蜴
    [2019.1.15]BZOJ2152 聪聪可可
    [2019.1.17]BZOJ3993 [SDOI2015]星际战争
    [2019.1.14]BZOJ2005 [Noi2010]能量采集
    [2019.1.10]BZOJ1853 [Scoi2010]幸运数字
    [2019.1.9]BZOJ2299 [HAOI2011]向量
    yyb博客的几道神仙题
    CQOI2018异或序列 [莫队]
  • 原文地址:https://www.cnblogs.com/qing-chen/p/7253424.html
Copyright © 2020-2023  润新知