zoukankan      html  css  js  c++  java
  • python-day14--带参数的装饰器+多个装饰器装饰同一个函数

    1.# 带参数的装饰器
    def f1(flag):
    def f2(func):
    def inner(*args,**kwargs):
    if flag:
    '''执行函数之前要做的'''
    r=func(*args,**kwargs)
    if flag:
    '''执行函数之后要做的'''
    return r
    return inner
    return f2
    @f1(True)
    def f3():
    print('egon')
    return ('eva')
    s=f3()
    print(s)

    2.#有参装饰器
    def auth(auth_type): #auth_type='mysql'
    def auth2(func):
    def inner(*args,**kwargs):
    if auth_type == 'file':
    name=input('name:>> ')
    pwd=input('password:>> ')
    if name == 'egon' and pwd == '123':
    res=func(*args,**kwargs)
    return res
    else:
    print('auth error')
    elif auth_type == 'mysql':
    print('mysql auth')
    else:
    print('not valid auth source')
    return inner
    return auth2

    @auth(auth_type='mysql') #@auth2 #index=auth2(最原始的index) #index=inner
    def index(name):
    print('welcome %s to index' %name)

    index('egon') #inner('egon')


    2.#多个装饰器装饰一个函数
    def qqxing(func):
    def qqxing_inner(*args,**kwargs):
    print('in qqxing:before')
    ret = func(*args,**kwargs)
    print('in qqxing:after')
    return ret
    return qqxing_inner

    def pipixia(func):
    def pipixia_inner(*args,**kwargs):
    print('in pipixia:before')
    ret = func(*args,**kwargs)
    print('in pipixia:after')
    return ret
    return pipixia_inner


    @qqxing
    @pipixia
    def dapangxie():
    print("饿了么")
    dapangxie()



    #应用场景

    #func
    #1.计算func的执行时间 @timmer
    #1.登录认证 #@auth

    #@auth #先登录 在认证
    #@timmer
    #func

    #解耦 尽量的让代码分离。小功能之间的分离
    #解耦的目的 提高代码的重用性
  • 相关阅读:
    第五周
    第四周
    第三周作业
    第二周编程总结
    编程总结(3)
    编程总结(2)
    编程总结(1)
    第七周作业
    第六周作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/7251836.html
Copyright © 2011-2022 走看看