zoukankan      html  css  js  c++  java
  • 装饰器(二)

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

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

    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()的一个参数

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

  • 相关阅读:
    delphi 时间格式操作
    Sleep函数的真正用意
    delphi公共函数 UMyPubFuncFroc--版权所有 (C) 2008 勇者工作室
    delphi override、overload、reintroduce的区别-0613.txt
    8、显示程序占用内存多少.txt
    可逆加密解密单元文件和调用方法
    Delphi7 客户端调用WebService(天气预报)
    操作TAB文件和TStringGrid赋值;
    3、利用SuperObject 循环处理Json深层次的值
    4、delphi record数组复制
  • 原文地址:https://www.cnblogs.com/sunj-96/p/10662667.html
Copyright © 2011-2022 走看看