一. 我们先写一个玩游戏的步骤

# def play():
# print("双击LOL")
# print("选择狂战士")
# print("进草丛")
# print("崩山击","十字斩")
我们想添加
  1.开挂
  2.关闭外挂
  目标函数前和后插入一段新代码 不改变原来代码
# def wrapper(fn):
# def inner():
# print("开挂")
# fn()
# print("关闭外挂")
# return inner
#
# play = wrapper(play)
#
# play()

通用装饰器的语法:

def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
@wrapper
def func():
pass
func()

同一个函数被多个装饰器装饰

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
# 顺序 1 2 3 func 3 2 1
@wrapper1
@wrapper2
@wrapper3
def func():
print("装饰器不难 滑稽脸)")
func() # 1 3 5 装饰器不难 滑稽脸 6 4 2

带参数的装饰器

def wrapper_out(参数):
def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
return wrapper
@wrapper_out(实参) # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
def func():
pass

27 Python 装饰器的更多相关文章

  1. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  2. Python - 装饰器使用过程中的误区

    曾灵敏 - APRIL 27, 2015 装饰器基本概念 大家都知道装饰器是一个很著名的设计模式,经常被用于AOP(面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, C ...

  3. Python装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...

  4. python装饰器执行顺序

    . python 装饰器 1) 2层装饰器 def decorator(func): # TODO def wrapper(*args, **kwargs): # TODO func(*args, * ...

  5. Python装饰器实现类Java注解功能

    最近想用Python写一个简单生成器,类似指定类型和范围,返回指定列表: 比如想要  0 ~ 3 的整数,则 我只需要指定: 最小:0, 最大:3, 步长:1 则返回一个 [0,1,2,3] 的列表 ...

  6. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

  7. 【低门槛 手把手】python 装饰器(Decorators)原理说明

    本文目的是由浅入深地介绍python装饰器原理 装饰器(Decorators)是 Python 的一个重要部分 其功能是,在不修改原函数(类)定义代码的情况下,增加新的功能 为了理解和实现装饰器,我们 ...

  8. 关于python装饰器

    关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...

  9. python装饰器通俗易懂的解释!

    1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...

随机推荐

  1. 基本CSS布局二

    基本CSS布局二------基本页面布局二 /*主面板样式*/ #container { width:100%; margin:0px auto;/*主面板DIV居中*/ } /*顶部面板样式*/ # ...

  2. JDBC——DBHelper代码模版

    JDBC数据库操作代码模版 package com.oolong.util; import java.sql.Connection; import java.sql.DriverManager; im ...

  3. sql 新建表

    CREATE TABLE `rims`.`rims_basic_dictionary_doctor_group` ( `id` INT(11) NOT NULL AUTO_INCREMENT prim ...

  4. 收集的21个优秀的学习资源Kotlin

    一.教程 1.The Kotlin Website Kotlin 官方网站(英文) 2.Kotlin editor Kotlin 在线编辑器   3.Keddit:在开发Android应用程序时学习K ...

  5. mysql sql常用语句

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...

  6. 获取packageName和startActivity

    import android import pprint # 获取packageName droid = android.Android(('192.168.1.101', 42250)) droid ...

  7. 作业类型维护流程(CO)

    一.建立作业类型——kl01 目的: 藉由做作業類型執行生產報工 目錄路徑: 會計à成本控制à成本中心會計à主檔資料à作業類型à個別處理à KL01 - 建立 Transaction   Code: ...

  8. linux之文件查找find grep详解,以及压缩归档

    .find linux里的实时查找工具,通过制定路径完成文件查找. find[options]...[查找路径] [查找条件] [处理动作] 查找路径:查找的位置,默认是当前文件夹. 查找条件:指定查 ...

  9. iOS实现渐变颜色

    下面是我的两种实现: 1.直接图片展示,注意图片的变形问题; 2.用CAGradientLayer渐变颜色实现; 代码如下: // // ViewController.m // ImageStrenc ...

  10. axios在Vue中的简单应用(一)

    1.安装axios: npm install --save axios vue-axios 2.安装qs: qs.stringify(data)可以解决data数据格式问题 npm install - ...