二 .通用装饰器的写法

  python里面的动态代理.

  存在的意义: 在不破坏原有的函数和原有函数的调用基础上,给函数添加新的功能

def wrapper(fn): #  fn是目标函数.
def inner(*args, **kwargs): # 为了目标函数的传参
'''在执行目标函数之前.....'''
ret = fn(*args, **kwargs) # 调用目标函数, ret是目标函数的返回值
'''在执行目标函数之后....'''
return ret # 把目标函数返回值返回. 保证函数正常的结束
return inner
@wrapper # target_func = wrapper(target_func)
def target_func():
pass
target_func() # 此时执行的是inner

二 .带有参数的装饰器

def wrapper_out(flag): # 装饰器本身的参数
def wrapper(fn): # 目标函数
def inner(*args, **kwargs): # 目标函数执行需要的参数
if flag == True:
print("问问同学,看看有没有场地")
ret = fn(*args, **kwargs) # 在执行目标函数之前
print("同学骗我. 恨你")
return ret
else:
ret = fn(*args, **kwargs) # 在执行目标函数之前
return ret
return inner
return wrapper
# # 语法糖 @装饰器
@wrapper_out(True) # 先执行wrapper_out(True) 返回一个装饰器 再和@拼接 @装饰器
def play(): # 被 wrapper装饰
print("走啊,打球去")
play()

三 .多个装饰器装饰同一个函数

def wrapper1(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner
def wrapper2(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner
def wrapper3(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner
# 就近原则
@wrapper1
@wrapper2
@wrapper3
def func():
print("我是可怜的func")
func()
# 1 2 3 func 3 2 1

  

python之路--装饰器的更多相关文章

  1. python之路——装饰器函数

    阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班 ...

  2. python之路---装饰器函数

    阅读目录 楔子 装饰器的形成过程 开放封闭原则 谈装饰器主要功能和装饰器固定结构 带参数的装饰器 多个装饰器装饰一个函数 返回顶部 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班 ...

  3. 百万年薪python之路 -- 装饰器

    装饰器 1.1 开放封闭原则 开放封闭原则具体定义是这样: 1.对扩展是开放的 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...

  4. 百万年薪python之路 -- 装饰器进阶

    本文链接:https://blog.csdn.net/xiemanR/article/details/72510885 一:函数装饰函数 def wrapFun(func): def inner(a, ...

  5. python高级之装饰器

    python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...

  6. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  7. python笔记 - day4-之装饰器

                 python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...

  8. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

  9. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

随机推荐

  1. centos7下源码安装多个nginx步骤完整版

    1.下载:wget http://nginx.org/download/nginx-1.10.0.tar.gz     解压:tar -zxvf nginx-1.10.0.tar.gz 2. 执行下面 ...

  2. hyperledger中文文档学习-4-构建第一个fabric网络

    接下来的操作都将在hyperledge环境安装构建的虚拟机的环境下进行 参考https://hyperledgercn.github.io/hyperledgerDocs/build_network_ ...

  3. The authenticity of host 'ip (ip)' can't be established.

    问题 The authenticity of host '10.4.172.67 (10.4.172.67)' can't be established.ECDSA key fingerprint i ...

  4. GoldenGate OGG-01032 There Is a Problem in Network Communication Error in Writing to Rmt Remote Trail Rmttrail (Doc ID 1446621.1)

    GoldenGate OGG-01032 There Is a Problem in Network Communication Error in Writing to Rmt Remote Trai ...

  5. Sphinx 生成 Windows 帮助文件 (.chm文件)

    本文不介绍 Sphinx 的用法,只简要罗列 Windows 下生成 .chm 文件的步骤. 0. 首先检查机器是否安装了 HTML Help Workshop 软件,一般安装路径应该是 C:\Pro ...

  6. Windows下pip命令无法使用的解决办法

    今天遇见了一个pip相关的问题 如下 我的python环境变量也有,但是还是无法使用pip 经过一位大佬的点播使用,使用python -m ensurepip这个命令可以检查 在cmd下运行自动完成p ...

  7. ASP.NET Core MVC – Tag Helpers 介绍

    ASP.NET Core Tag Helpers系列目录,这是第一篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  8. DES对称加密算法详解和c++代码实现(带样例和详细的中间数据)

    特点: 1.DES是对称性加密算法,即加密和解密是对称的,用的是同一个密钥 2.DES只处理二进制数据,所以需要将明文转换成为2进制数据 3.DES每次处理64位的数据,所以应该将明文切割成64位的分 ...

  9. vue 中给组建绑定原生事件@click.native=""

    <template>     <div class="div">  //组建使用          <v-header @click.native=& ...

  10. 一看就懂的Mybatis框架入门笔记

    本篇为初学Mybatis框架时的入门笔记,整理发出 Spring集成Mybatis https://www.cnblogs.com/yueshutong/p/9381590.html SpringBo ...