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

  • 相关阅读:
    SQL逻辑查询语句执行顺序
    数据库索引的实现原理
    JAVAMail邮件服务器
    TCP/IP基础
    Java IO流学习总结
    [Lydsy1806月赛] 超速摄像头
    CodeForces
    SCU
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/kk328/p/8596236.html
Copyright © 2011-2022 走看看