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

    简单装饰器:

    写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

    封闭:已实现的功能代码块

    开放:对扩展开发

    def outer(function):
    def inner():
    print("123")
    ret = function()
    #return ret
    return inner
    @outer
    def f1():
    print("456")
    f1()
    运行后结果123 456
    原理:将函数名f1当作参数传进outer函数执行outer函数 然后再赋值给f1
        f1 =outer(f1) function=f1
        outer函数的返回值是inner函数名 所以f1 = inner
        重新执行f1()就是执行inner() 所以执行完123 后执行456
    可以有多个参数
    def w1(func):
     2     def inner(arg1,arg2,arg3):
     3         # 验证1
     4         # 验证2
     5         # 验证3
     6         return func(arg1,arg2,arg3)
     7     return inner
     8 
     9 @w1
    10 def f1(arg1,arg2,arg3):
    11     print 'f1'

    可以装饰具有处理n个参数的函数的装饰器
    def w1(func):
        def inner(*args,**kwargs):
            # 验证1
            # 验证2
            # 验证3
            return func(*args,**kwargs)
        return inner
     
    @w1
    def f1(arg1,arg2,arg3):
        print 'f1'

    多个装饰器应用到同一个函数
    def outer(function):
    def inner(*args,**kwargs):
    print("123")
    function(*args,**kwargs)
    # return ret
    return inner
    def outer1(function):
    def inner1(*args,**kwargs):
    print("wangyao")
    function(*args,**kwargs)
    return inner1
    @outer
    @outer1
    def f1(a1,a2,a3):
    print("456")
    f1(1,2,3)
    结果是123 wangyao 456
    @outer1被替换成inner1()函数
    再将inner1()函数应用到@outer装饰器中

     
     



  • 相关阅读:
    八、比卦
    七、师卦
    六、讼卦
    五、需卦
    力扣-两数之和
    什么是3NF (范式) ?
    SQL事务4个特性
    什么是索引?
    假设把只包含01的数组(如{0,0,1,1,1,0,1,0,0,1})按照升序排序,可以任意交换两个数的位置,请输出最少需要交换的次数。
    找规律并用编程实现如下数列(数值超过10000停止打印) 1,1,2,2,3,2,5,4,8,8
  • 原文地址:https://www.cnblogs.com/wangyao2317072926/p/7691312.html
Copyright © 2011-2022 走看看