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

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

  • 相关阅读:
    java核心学习(十六) javaIO框架---Process类的流,读写其他进程
    java核心学习(十五) IO框架---重定向标准输入输出
    java核心学习(十四) IO框架---推回输入流
    java核心学习(十三) IO框架---转换流和缓冲流
    java核心学习(十二) IO框架---理解IO流
    递推+矩阵快速幂 HDU 2065
    树形DP hdu1520
    二分图之最小路径覆盖 HDU1151
    二分图之最小独立集 HDU 2768
    最短路 POJ2267
  • 原文地址:https://www.cnblogs.com/sunj-96/p/10662667.html
Copyright © 2011-2022 走看看