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

    Python的装饰器和Java的代理差不多,也类似AOP切面,就是在方法的前面做点事情,但是要有Python的闭包基础,返回的是一个函数。

    一 先键2个基础函数

    # 创建几个函数
    
    def add(a , b):
        '''
            求任意两个数的和
        '''
        r = a + b
        return r
    
    
    def mul(a , b):
        '''
            求任意两个数的积
        '''
        r = a * b
        return r   

    二 建立测试函数

    # 我们希望在不修改原函数的情况下,来对函数进行扩展
    def fn():
        print('我是fn函数....')
    
    # 只需要根据现有的函数,来创建一个新的函数
    def fn2():
        print('函数开始执行~~~')
        fn()
        print('函数执行结束~~~')
    
    fn2()

    上边的方式,已经可以在不修改源代码的情况下对函数进行扩展了但是,这种方式要求我们每扩展一个函数就要手动创建一个新的函数,实在是太麻烦了
    为了解决这个问题,我们创建一个函数,让这个函数可以自动的帮助我们生产函数

    三 改进

    def begin_end(old):
        '''
            用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束
    
            参数:
                old 要扩展的函数对象
        '''
        # 创建一个新函数
        def new_function(*args , **kwargs):
            print('开始执行~~~~')
            # 调用被扩展的函数
            result = old(*args , **kwargs)
            print('执行结束~~~~')
            # 返回函数的执行结果
            return result
    
        # 返回新函数
        return new_function
    
    f2 = begin_end(add)
    
    f2(10,29)

     四 注解用法

    def fn3(old):
        '''
            用来对其他函数进行扩展,使其他函数可以在执行前打印开始执行,执行后打印执行结束
    
            参数:
                old 要扩展的函数对象
        '''
        # 创建一个新函数
        def new_function(*args , **kwargs):
            print('fn3装饰~开始执行~~~~')
            # 调用被扩展的函数
            result = old(*args , **kwargs)
            print('fn3装饰~执行结束~~~~')
            # 返回函数的执行结果
            return result
    
        # 返回新函数
        return new_function
    
    @fn3
    @begin_end
    def say_hello():
        print('大家好~~~')
    
    say_hello()

  • 相关阅读:
    IE8下,时间函数问题
    sublime有时候用快捷键时出现的是css的快捷键
    热词高亮并去重
    关于百分比的margin
    手机端后退功能
    CSS3小水滴代码
    关于Gmapping的学习2
    关于概率运动模型
    A*算法的学习
    经典ICP算法
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12187131.html
Copyright © 2011-2022 走看看