zoukankan      html  css  js  c++  java
  • Python之装饰器复习

    一、什么是装饰器?

           装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。


    二、强调装饰器的原则:

    1 不修改被装饰对象的源代码

    2 不修改被装饰对象的调用方式

    3:在遵循1和2的前提下,为被装饰对象添加上新功能

     

    三、装饰器的使用:

    import time
    def timmer(func):
        def wrapper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print('run time is %s' %(stop_time-start_time))
            return res
        return wrapper
    
    @timmer         # 相当于 foo = timmer(foo)
    def foo():
        time.sleep(3)
        print('from foo')
    foo()
    无参数的装饰器
    def add(adds):     #新增一个参数,接收装饰器传来的值
        def decor(func):   
            print(adds)    
            def inner(*arg , **kw):      
                print('我是函数decor')
                result = func(*arg , **kw)  
                print(adds)        #打印装饰器中的值
                return result         
            return inner    
        return decor     #闭包
    
    # @decor  show = decor(show)
    @add('我是新加的参数adds')     #相当于返回decor函数,return decor
    
    def show(*arg , **kw):
        print('我是函数show')
        print('我是函数show中的参数name:',arg,'我是函数show中的参数age:',kw)
        return '我是函数show中的返回值'
    
    ret= show(*'xiaobo' , **{'zidian':25})     #*把'xiaobo'转换为元组 ,**把字典传进去
    print(ret)
    带参数的装饰器
    def decor(func):
        def inner(name,age):
            print('我是decor')        # 在函数之前执行的功能
            return func(name,age)    # 被装饰的函数
        return inner
    
    @decor
    def show(name , age):
        print('我是函数show')
        print('我是函数show中的参数name:',name,'我是函数show中的参数age:',age)
        return '我是函数show中的返回值'
    show('alex',20)
    被修饰的函数需要参数
  • 相关阅读:
    block的使用
    控制器的多种创建方式
    指针函数和函数指针
    UIScrollView实现图片轮播器及其无限循环效果
    如何按顺序执行两个动画
    代理、通知、KVO的应用
    CAlayer层的属性
    UIView的autoresizingMask和autoresizesSubviews属性的剖析
    面向对象编程思想(OOP)总结
    scala中闭包的使用
  • 原文地址:https://www.cnblogs.com/ray-h/p/10277895.html
Copyright © 2011-2022 走看看