• 装饰器(二)


    ---恢复内容开始---

    实现了完整的功能后,还可以对程序做进一步的优化:

    user_state = False
    name = "sunjing"
    password = "123"

    def login(func1):
    def inner(*args,**kwargs):     #3.此时就可以在inner函数中加一个非固定参数来接收jap()中的参数
    global user_state
    if user_state == False:
    user_name = input("name:")
    user_password = input("password:")
    if user_name == name and user_password == password:
    print("login success")
    user_state = True
    else:
    print("wrong name or password")
    if user_state:
    func1(*args,**kwargs)   #4.同样,需要在执行原jap()函数时,同样加入非固定参数
    return inner

    @login
    def jap(style):              #1.假如日韩专区下还有分类,需要显示
    print("----日韩专区----",style)   #5.此时就可以输出不同的分区了
    def america():
    print("----欧美专区----")
    def homemade():
    print("----国产专区----")
    def cartoon():
    print("----动漫专区----")

    jap("BT")                  #2.显示日韩专区下的BT分类

    完成后,发现还有要求,需要在登录时确认用微信或QQ登录,于是写下了如下代码:

    def login(func):     #此处的func为"QQ"
        def outter(func1):  #此处的func1为jap
            def inner(*args,**kwargs):
                global user_state
                if user_state == False:
                    user_name = input("name:")
                    user_password = input("password:")
                    if user_name == name and user_password == password:
                        print("login success")
                        user_state = True
                    else:
                        print("wrong name or password")
                if user_state:
                    func1(*args,**kwargs)
            return inner
        return outter
    
    @login("QQ")        #此处可以判断登录时用QQ登录。执行步骤是这样的1.先执行login(“QQ”) 把QQ作为一个参数执行login函数。2.得到返回值outter,把jap作为outter函数的一个参数,执行outter函数      
    def jap(style):      #3.得到返回值inner再赋值给jap print("----日韩专区----",style) def america(): print("----欧美专区----") def homemade(): print("----国产专区----") def cartoon(): print("----动漫专区----") jap("BT")          #此时调用jap()函数相当于调用inner()函数,而"BT"相当于inner()的一个参数

    这样就完成了对登录方式的要求

  • 相关阅读:
    linux zip命令 tar命令 【压缩、解压缩】参数列表:
    理解 uptime 的:“平均负载”? 如何模拟测试
    mark_Linux_wc
    我应该怎么学习SAP?
    SAP 销售订单交货对成本中心记账
    从华为“鸿蒙”备胎看IT项目建设
    什么样的系统算是坑
    写在Logg SAP项目上线之际
    SAP系统邮件功能配置
    警惕SAP项目被“中间商赚差价”
  • 原文地址:https://www.cnblogs.com/sunj-96/p/10662667.html
Copyright © 2020-2023  润新知