Python Decorator

本文介绍了Python装饰器的基本概念及其应用场景,通过两个实例演示了如何使用装饰器来增强函数的功能,并保持代码简洁。此外,还讨论了如何保留被装饰函数的元信息。
/*********************************************************************************
 *                              Python Decorator
 * 说明:
 *     最近要处理markdown文档,想使用mkdocs来做实时修改显示,但其界面的pages设定
 * 总让我这边不是很舒服,不能隐藏,所以打算看一下其源代码,看能不能隐藏,先学习
 * 一下Python修饰器的语法,原因是源代码里面用到了修饰器。
 *
 *                                                2016-8-30 深圳 南山平山村 曾剑锋
 *********************************************************************************/

一、参考文档:
    1. A guide to Python's function decorators
        http://thecodeship.com/patterns/guide-to-python-function-decorators/
    2. Python天天美味(34) - Decorators详解
        http://www.cnblogs.com/coderzh/archive/2010/04/27/python-cookbook33-decorators.html
    3. Python Decorator的来龙
        https://segmentfault.com/a/1190000003719779
    4. 装饰器
        http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819879946007bbf6ad052463ab18034f0254bf355000

二、示例1:
    def p_decorate(func):
       def func_wrapper(name):
           return "<p>{0}</p>".format(func(name))
       return func_wrapper

    @p_decorate
    def get_text(name):
       return "lorem ipsum, {0} dolor sit amet".format(name)

    print get_text("John")
    # Outputs <p>lorem ipsum, John dolor sit amet</p>

三、示例2:
    from functools import wraps

    def tags(tag_name):
        def tags_decorator(func):
            @wraps(func)
            def func_wrapper(name):
                return "<{0}>{1}</{0}>".format(tag_name, func(name))
            return func_wrapper
        return tags_decorator

    @tags("p")
    def get_text(name):
        """returns some text"""
        return "Hello "+name

    print get_text.__name__ # get_text
    print get_text.__doc__ # returns some text
    print get_text.__module__ # __main__
    

 

转载于:https://www.cnblogs.com/zengjfgit/p/5820430.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值