zoukankan      html  css  js  c++  java
  • python中的装饰器

    什么是装饰器?

    装饰器就是做装饰的,装饰谁?装饰的是函数,也就是给函数化妆。为什么要给函数化妆呢?其实就是要给函数添加一些功能,为什么要用装饰器呢?为啥不能直接修改函数呢?简单粗暴!因为加上装饰器的话,可以不改变人家原来的函数,防止你乱改人家代码出错,可维护性更好

    假如我们要给一个返回字符串的函数加上标签

    >>> def say_hello(name):
    	return "Hello "+name+"!"
    
    >>> def p_decorate(func):
    	    def func_wrapper(name):
    		    return '<p>'+func(name)+'</p>'
    	    return func_wrapper
    
    >>> my_say_hello=p_decorate(say_hello)
    >>> my_say_hello("xiaoming")
    '<p>Hello xiaoming!</p>'
    >>> 
    

    装饰器是什么原理呢?

    其实就是将原来的函数加一些功能变成一个新的函数,然后再把这个新的函数返回

    比如p_decorate函数会返回一个装饰好的新函数func_wrapper

    func_wrapper函数负责给say_hello函数化妆,也就是加新的东西,其调用原来的函数加上标签

    最后p_decorate函数将化妆好的func_wrapper函数返回

    这样我们将say_hello函数传入装饰器,得到了装饰好的新函数my_say_hello,我们调用就得到了结果

    语法糖调用

    def p_decorate(func):
        def func_wrapper(name):
            return '<p>'+func(name)+'</p>'
        return func_wrapper
    
    @p_decorate
    def say_hello(name):
    	return "Hello "+name+"!"
    
    print(say_hello("Max"))
    
    

    防止函数名被改

    多个装饰器使用

    装饰器传参

    使用语法糖

    不使用语法糖

  • 相关阅读:
    python中if __name__ == '__main__': 的解析
    python项目练习地址
    HTTP Response Splitting攻击探究 <转>
    常用操作系统扫描工具介绍
    app兼容性测试的几种方案
    svn自动备份并上传到ftp
    有关交易的性能测试点
    修改文件测试的测试点
    新增文件测试的测试点
    添加附件测试的测试点
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11549245.html
Copyright © 2011-2022 走看看