装饰器带参数

不用装饰器调用函数。

user_status = False


def login(auther_type):   #auther_type接收参数qq,wx
    def outer(func):    #func接收参数hanshuhenan作为参数。

        def inner(*args, **kwargs):  #非固定参数,接收模块里传递的任意数量参数。
            user = "alex"
            password = "123"
            global user_status
            if not user_status:
                user = input("用户名:")
                password = input("密码:")
                if user == "alex"and password == "123":
                    print("欢迎登陆")
                    user_status = True
                else:
                    print("您输入的密码错误,请重新输入")

            if user_status:
                func(*args,**kwargs)
        return inner
    return outer



def home():
    print("----主页----")


def america():
    print("----欧美专区----")

# @login("qq")
def japan(uy,ty):
    print("----日本专区----", ty)

# @login("wx")   #login("wx) 返回的是outer,outer自动接收henan,返回inner,inner执行内部函数。
def henan(arg,args,rag):
    print("----河南专区----", arg, rag)


xx = login("qq")
henan = xx(henan)

henan("movie", "movies", "uiyr")
japan("yti", "ruir")  

用有带参数的装饰器(装饰器带参数需要用嵌套函数不断返回内层函数的地址。不带函数的装饰器直接调用下面的函数名作为参数)

user_status = False


def login(auther_type):   #auther_type接收参数qq,wx
    def outer(func):    #func接收参数hanshuhenan作为参数。

        def inner(*args, **kwargs):  #非固定参数,接收模块里传递的任意数量参数。
            user = "alex"
            password = "123"
            global user_status
            if not user_status:
                user = input("用户名:")
                password = input("密码:")
                if user == "alex"and password == "123":
                    print("欢迎登陆")
                    user_status = True
                else:
                    print("您输入的密码错误,请重新输入")

            if user_status:
                func(*args,**kwargs)     
        return inner
    return outer



def home():
    print("----主页----")


def america():
    print("----欧美专区----")

@login("qq")
def japan(uy,ty):
    print("----日本专区----", ty)

@login("wx")   #login("wx) 返回的是outer,outer自动接收henan,返回inner,inner执行内部函数。即login("qq")(henan)(*args,**kwargs)
def henan(arg,args,rag):
    print("----河南专区----", arg, rag)


henan("movie", "movies", "uiyr")
japan("yti", "ruir")

  

posted @ 2018-03-22 16:02  Roc_Atlantis  阅读(422)  评论(0编辑  收藏  举报