zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器:

    定义:本质是一个函数,装饰其他的函数,就是为其他函数添加附加功能。

    原则:1.不能修改被装饰的函数的源代码

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

    实现装饰器的知识储备:

    1.函数即“变量”

    2.高阶函数

    3.嵌套函数

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

    装饰器的一个例子:

    import time

    def timmer(func):

          def warpper(*args,**kwargs):

                start_time=time.time()

                func()

                stop_time=time.time()

                print('the func run time is %s'%(stop_time-start_time))

           return warpper

    @timmer

    def test1():

          time.sleep(3)

          print('in the test1')

    test1()

    我们可以发现,timmer作为一个装饰器,其实没有改变test1的源代码和引用方式。就好比,我让一只猫变成一只狗了,但是猫并不知道他变成了一只狗。

    第一部分:函数即变量

    如何理解这一句话:

    比如我令x=1,这时候就在内存里创建了一个小房子,小房子里面是1,这个房子的门牌号是x,之后引用的时候,找到门派号就可以了,当x被取消的时候,里面的1其实是不会被取消的,当刷新之后,1突然发现没人引用他了才取消。

    同样,函数也是这个样子的,只不过门牌号变成了函数名,而1遍成了函数体也就是函数的逻辑。

    比较下面2个代码:

    第一个:

    def foo():

           print('in the foo')

          bar()

    def bar():

          print('in the foo')

    foo()

    这个代码就能运行成功,如何理解呢:他先定义了foo这个函数,定义完之后,后面两行代码就被当成字符串放在了foo这个小房子里面。然后定义了bar这个函数,后面的一行代买就被当成字符串放在bar这个小房子里面,因此运行最后一行foo时,都能找到对象。

    第二个:

    def foo():

          print('in the foo')

          bar()

    foo()

    def bar():

         print('in the bar')

    这个代码就执行不了,会报错,因为执行到foo时找不到bar。

  • 相关阅读:
    Python Requests-学习笔记(9)-错误与异常
    .NET C# 创建WebService服务简单的例子
    10个免费开源的JS音乐播放器插件
    7款高颜值HTML5播放器:让你的音乐有声有色
    Asp.net基于session实现购物车的方法
    ASP.NET用GridView控件实现购物车功能
    jquery鼠标跟随流体吸引特效
    jquery鼠标跟随特效
    JQUERY互动星空粒子背景效果
    jQuery插件库常用前端库引用地址
  • 原文地址:https://www.cnblogs.com/zaizaiaipython/p/7783581.html
Copyright © 2011-2022 走看看