• 装饰器带参数


    不用装饰器调用函数。

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

      

  • 相关阅读:
    shell 字符串切分成数组
    RDD关键性能考量之 内存管理
    RDD关键性能考量之 序列化格式
    【转】Linux ln(link) 命令详解
    【转】redis配置认证密码
    【转】MongoDB 知识要点一览
    RDD关键性能考量之 并行度
    使用thumbnailator不按照比例,改变图片的大小
    Linux服务器redhat配置本地yum源
    Oracle表字段的增删改和重命名
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/8624443.html
Copyright © 2020-2023  润新知