需求:想要在test_func函数前后执行一些代码  

1.第一步(定义函数,将调用原函数,使用新函数替换)

def test_func():
    return 'test_func'

def test_wrapper_func():
    print 'before'
    rt = test_func()
    print 'after'
    return rt

print test_wrapper_func()

2.第二步(原函数可以定义参数)

def test_func():
    return 'test_func'

def test_wrapper_func(*args, **kwargs):
    print 'before'
    rt = test_func(*args, **kwargs)
    print 'after'
    return rt

print test_wrapper_func()

3.第三步(定义工厂函数,返回wapper函数)

def test_func():
    return 'test_func'

def test_wrapper_func(*args, **kwargs):
    print 'before'
    rt = test_func(*args, **kwargs)
    print 'after'
    return rt

def test_wrapper():
    return test_wrapper_func

test_wrapper_func_temp = test_wrapper()

print test_wrapper_func_temp == test_wrapper_func
print test_wrapper_func_temp()
print test_wrapper_func()

4.第四步(去掉共有的wapper函数,放在工厂函数内部)

def test_func():
    return 'test_func'

def test_wrapper():
    def wrapper(*args, **kwargs):
        print 'before'
        rt = test_func(*args, **kwargs)
        print 'after'
        return rt
    return wrapper

test_wrapper_func = test_wrapper()
print test_wrapper_func()

5.第五步(可以为所有函数添加同一功能前后执行代码)

def test_func()
    return 'test_func'

def test_wrapper(func):
    def wrapper(*args, **kwargs):
        print 'before'
        rt = func(*args, **kwargs)
        print 'after'
        return rt
    return wrapper

test_wrapper_func = test_wrapper(test_func)
print test_wrapper_func()

6.第六步(使用装饰器)

def test_wrapper(func):
    def wrapper(*args, **kwargs):
        print 'before'
        rt = func(*args, **kwargs)
        print 'after'
        return rt
    return wrapper

@test_wrapper
def test_func():
    return 'test_func'

print test_func()

7.第七步(修正多个装饰器时,使用函数fun名称问题)

from functools import wraps

def test_wrapper(func):    

    @wraps(func)
    def wrapper(*args, **kwargs):
        print 'before'
        rt = func(*args, **kwargs)
        print 'after'
        return rt
    return wrapper

@test_wrapper
def test_func():
    return 'test_func'

print test_func()

Python学习群:238757010

 

Python无参装饰器的更多相关文章

  1. python语法糖之有参装饰器、无参装饰器

    python的装饰器简单来说就是函数的一种形式,是为了扩展原来的函数功能而设计的. 装饰器的特别之处在于它的返回值也是一个函数,可以在不改变原有函数代码的基础上添加新的功能 # 先定义一个函数及引用# ...

  2. PYTHON-有参装饰器,无参装饰器,语法糖

    装饰器 装饰器就是闭包函数的一种应用场景 一 为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强 ...

  3. day11有参装饰器,无参装饰器

    今日内容 1.有参装饰器 2.无参装饰器 什么是装饰器? 用来为被装饰对象添加新功能的工具. 注:装饰器可以是任意可调用对象,被装饰对象也可以是任意可调用对象. 为何要用装饰器? 开放封闭原则:对修改 ...

  4. python 有参装饰器与迭代器

    1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) re ...

  5. python带参装饰器的改良版

    简单点就是这种 def deco2(param=1): def _deco2(fun): def __deco2(*args, **kwargs): print (param) fun(*args, ...

  6. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

  7. Python练习-无参装饰器的正确打开方式

    import time def DecoUserPrint(UserFunc):#定义一个DecoUserPrint接收参数的多重方法 def DecoPrint(): StartTime = tim ...

  8. python中的无参装饰器和有参装饰器

    python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器 ...

  9. python基础语法8 叠加装饰器,有参装饰器,wraps补充,迭代器

    叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 de ...

随机推荐

  1. python离线安装外部依赖包

     1.制作requirement.txt pip freeze > requirement.txt 内网安装外部依赖包办法: 例如:安装pytest包得时候会顺带安装pytest依赖包 离线下载 ...

  2. lsync目录文件实时同步工具

    参考文档:https://vastxiao.github.io/article/2017/09/02/Linux/lsyncd_usage/ 防止连接丢失,已保存至百度网络-郑州-XXXXX 建议首先 ...

  3. 【实战项目】【FLEX】#900 实现拖控件功能

    一.功能说明:拖控件的功能(类似FLEX,VS 里面的拖控件). 提示:大家对事件的注册和派发的说法可能不一样.因为在FLEX中和在Java中,叫法有的区别.但是本质是一样的. 注册事件  == 设置 ...

  4. 通过golang 查询impala

    cloudera官方没有提供impala基于golang的驱动,github有github.com/bippio/go-impala package main import ( "conte ...

  5. linux 字体 设置 en_US.UTF-8

    设置:localectl    set-local    LANG=en_US.UTF-8 查看: localectl list-locales

  6. Fluent Terminal

    特性: PowerShell,CMD,WSL或自定义shell的终端 支持选项卡和多个窗口 主题和外观配置 导入/导出主题 导入iTerm主题 全屏模式 可编辑的键绑定 搜索功能 配置shell配置文 ...

  7. linux下10款markdown软件

    原文:https://linux.cn/article-7623-1.html 在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器. 你可以在 Linux 平 ...

  8. python-文件基本操作(一) (转载)

    转载自: https://www.cnblogs.com/nizhihong/p/6528439.html 一.打开文件的方法: 注意:file()和open()基本相同,且最后要用close()关闭 ...

  9. Oracle(二)SELECT语句执行顺序

    转载自:小强斋太-Study Notes,原文链接 从join on和where执行顺序认识T-SQL查询处理执行顺序 目录 一.样例 二.SELECT语句的处理过程 1. FROM阶段 2. WHE ...

  10. OpenID Connect Core 1.0(九)声明(Claims)

    5 声明(Claims) 这一节说明客户端如何获取关于终端用户声明和验证事件.它还定义了一组标准的基本声明配置.预定义一组可请求的声明,使用特定的scope值或能用于请求参数中的个人声明.声明可以直接 ...