zoukankan      html  css  js  c++  java
  • 装饰器带参数

    不用装饰器调用函数。

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

      

  • 相关阅读:
    Codeforces 379 F. New Year Tree
    「NOI2018」屠龙勇士
    「NOI2018」归程
    深入理解Java枚举类型(enum)
    2018.6.9-学习笔记
    String、StringBuffer与StringBuilder介绍
    HashMap和HashTable到底哪不同?
    HashMap详解
    List,Set和Map详解及其区别和他们分别适用的场景
    Java中高级面试题(1)
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/8624443.html
Copyright © 2011-2022 走看看