装饰器带参数

不用装饰器调用函数。

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")

  

转载于:https://www.cnblogs.com/Roc-Atlantis/p/8624443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值