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

    在python面试过程之中,装饰器是面试的必经之路。

    在我们使用函数的过程之中,我们有可能遇下面的情况,就是在定义函数的过程之中定义了相同的函数,造成的结果是我们使用时会产生覆盖

    Def test():

    print("-----1------")

    Def test():

    print("-----2-----")

    Test()

    但是在开发中,我们要尽量避免函数名相同

    写代码的过程之中要遵循开放封闭原则

    封闭:针对以实现的功能模块

    开放:对扩展开发

    小需求:某创业公司有n个部门,一个平台,平台开发完成,各个部门之间不能互相调用

    错误做法:

    def w1(func):

    def inner():

    print("-----正在验证----")

    func()

    return inner

    def f1():

    print("-----1-----")

    def f2():

    print("-----2------")

    innerFunc = w1(f1)

    innerFunc()

    在上述代码中,我们使用innerFunc()函数完成,不符合开发的需求。

    此时用到装饰器,装饰器的使用如下:

    def w1(func):

    print("----正在装饰1----")

    def inner():

    print("----正在验证权限1----")

    func()

    return inner

    def w2(func):

    print("----正在装饰2----")

    def inner():

    print("----正在验证权限2----")

    func()

    return inner

    @w1

    @w2

    def f1():

    print("----正在验证----")

    f1()

    def func(funcname):

    print("----func---1---")

    def func_in():

    print("----func_in---1---")

    funcname()

    print("----func_in---2---")

    print("----func---2---")

    return func_in

    @func

    def test():

    print("ax1a21x3a")

    test()

    def func(funcname):

    print("----func---1---")

    def func_in(*args,**kwargs):

    print("----func_in---1---")

    funcname(*args,**kwargs)

    print("----func_in---2---")

    print("----func---2---")

    return func_in

    @func

    def test(a,b,c):

    print("----test----a=%d,b=%d,c=%d,d=%d---",(a,b,c))

    test(11,22,33)

    不定长参数的处理,我们需要用到*args和**kwargs

  • 相关阅读:
    微信WeUI扩展组件
    redis—Spring中redis缓存的简单使用
    Spring整合Mybatis 之分页插件使用
    MD5—加密,加盐
    验证码—原生验证码工具类的使用
    jQuery—$让渡
    android学习笔记42——图形图像处理2——绘图
    android学习笔记41——图形图像处理1
    android学习笔记40——国际化和资源自适应
    android学习笔记39——使用原始资源
  • 原文地址:https://www.cnblogs.com/kk328/p/8596236.html
Copyright © 2011-2022 走看看