zoukankan      html  css  js  c++  java
  • 装饰器

    把概念拉下神坛,把代码请进殿堂.--print

    文字在思维面前,总有捉襟见肘的时候,比方说,他拿代码,就没有什么招,越形容越晦涩,所以,话不多说,直接上图上代码.

    对, 在讲装饰器之前,需要先了解下闭包,上代码

    def outer(x,y):
    
        def inner():
            if x > y:
                return x
            return y
        return inner
    res = outer(5,7)
    print(res()) #7
    print(res()) #7
    print(res()) #7
    print(res()) #7
    #从闭包的结构上可以看出,inner中的x,y,是需要outer从外部接收进来的,而inner也只会在outer的内部找,且outer内部的变量,属于局部空间内的变量,
    #所以,在外部不重新给outer传递新的x,y值之前,x,y的值都会保持不变,所以,从上面的代码可以看出,一次赋值,可以多次执行
    #致于好处,谁用谁知道.

    接下来,了解一下闭包函数的进阶版>>>装饰器,代码如下

    
    
    from functools import wraps

    #验证登录
    def login():
        username = input('username>>>:').strip()
        pwd = input('pwd>>>:').strip()
        if username == 'jj' and pwd == '123':
            print('登录成功')
            return True
        else:
            print('登录失败')
            return False
    
    #装饰器
    def outter(func):   @wraps(func) def inner(*args,**kwargs): if login(): res = func(*args,**kwargs) else: return return res return inner #调用装饰器 @outter def index(): print('index 在这里.') index()

    图上和代码都上了.阐述一下,其实装饰器,接地气一点说,就是个模板,他有两个特点

    >>>不改动源代码

    >>>不改变调用方式

    还能实现想要的功能.这就是他的厉害和独特之处

    这么高大上的东西,若不能完全理解,也没关系,咱伟大的前辈,总结了装饰器的标准模板,如下:

    from functools import wraps  # 导入装饰器修饰模块
    
    def outter(func):   # 设置外层函数,并设置形参
    
        @wraps(func)    # 调用方法,修饰函数
    
        def inner(*args,**kwargs):  # 设置内层函数,设置参数,
    
            print('方法调用前')
    
            res = func(*args,**kwargs)  # 接收参数,执行函数,并接收函数返回值
    
            print('方法调用后')
    
            return res  # 返回函数返回值
    
        return inner  # 返回内部函数的内存地址




    #讲个笑话,某人在岸上学了两个月游泳的理论知识,感觉很牛X了,结果下水游了会,发现完全不是那么回事.所以道理就是,不懂没关系,多敲多练,把代码输进脑子里,脑子自然会处理,一遍遍重复,自然会记下来.
  • 相关阅读:
    c#_表单处理方式
    C#_在.net中序列化读写xml方法的总结
    Jquery_异步上传文件多种方式归纳
    C#_Jquery无刷新上传
    构造方法的作用
    ssh项目问题01,为创建数据库抛出的异常
    成员方法的使用及其调用
    静态页面的使用和操作
    oa项目环境搭建的操作步骤详解
    写做顺序
  • 原文地址:https://www.cnblogs.com/hellozizi/p/11171193.html
Copyright © 2011-2022 走看看