装饰器

定义:本质是函数,(只不过是用来装饰其他函数而已),就是为其他函数添加附加功能

原则:

  • 1. 不能修改被修饰函数的源代码
  • 2.不能修改被修饰函数的调用方式

实现装饰器的知识储备

  • 1.函数即“变量”
  • 2.高阶函数
    • a.把一个函数名当做实参传给另外一个函数
    • b.返回值中包含函数名
  • 3.嵌套函数

综上,高阶函数 + 嵌套函数 ===> 装饰器

程序示例:

def fun(bar):
def dec():
print('this is dec')
bar()
return dec @fun #test = fun(test) test = dec
#####################下面是被装饰函数##########################
def test():
print('test is here') test()

把text传给bar的时候,bar就相当于之前的text了,在执行@fun的时候,函数fun(text)运行后,返回dec给text,那么此时text已经不是之前的text了,此时text已经成了dec,也就是我们的装饰函数,由于之前我们把text悄悄传给了bar,那么装饰函数运行完之后,调用bar()就解决了。

记住:返回值包含函数名

此处建议断点调试

python_3 装饰器之初次见面的更多相关文章

  1. Python装饰器之functools.wraps的作用

    # -*- coding: utf-8 -*- # author:baoshan def wrapper(func): def inner_function(): pass return inner_ ...

  2. Python装饰器之 property()

    1. 何为装饰器? 官方定义:装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数 ...

  3. python 闭包 闭包与装饰器之间的关系

    一.一个闭包的实际应用例子 def func(a, b): def inner(x): return a * x + b return inner inn = func(1, 1) print(inn ...

  4. python 装饰器之应用示例

    import time import hashlib import pickle import threading #装饰函数缓存应用 cache ={} def is_obsolete(entry, ...

  5. python迭代器、生成器、装饰器之装饰器

    装饰器...... 定义:本质是函数,为其他函数添加附加功能 原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰函数的调用方式 仔细观察下面代码,看看有什么发现. 内嵌函数+高阶函数+闭包= ...

  6. Python 装饰器之 functools.wraps

    在看 Bottle 代码中看见 functools.wraps 这种用法. def make_default_app_wrapper(name): """ Return ...

  7. python装饰器之函数作用域

    1.函数作用域LEGB L:local函数内部作用域 E:enclosing函数内部与内嵌函数之间 G:global全局作用域 B:build-in内置作用域 passline = 60 def fu ...

  8. python_3 装饰器参数之谜

    装饰器参数之谜 之前已经初步了解过装饰器了,知道了装饰器可以"偷梁换柱",在不改变函数的调用方式和函数内容的时候,而把函数的功能偷偷地修改. 那么问题来了,如果被修改的函数中有参数 ...

  9. python装饰器之使用情景分析

    http://blog.csdn.net/yueguanghaidao/article/details/10089181

随机推荐

  1. C# 生成图片验证码 图片缩略图 水印

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...

  2. Autofac的基本使用---3、泛型类型

    Autofac的基本使用---目录 准备 使用的表是Teacher,创建相关的IDAL.DAL.IBLL.BLL层. 使用EF,创建一个Model层,存放edmx文件. 创建一个Infrastruct ...

  3. 自己总结的关于图论的一些算法实现(C语言实现,有较详细注释,800行左右)

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define TRUE 1 5 # ...

  4. 学习DOS,个人笔记

    在win中\表示根目录,  在linux中/表示根目录         注意: 有些家庭版的系统会选择性的调用命令的,有的命令虽然有那个文件,但是不能使用.....     dir 命令   英语全称 ...

  5. 容器编排系统K8s之Dashboard部署

    前文我们了解了k8s的访问控制第三关准入控制相关插件的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14220402.html:今天我们来了解下k8s的 ...

  6. Turtlebot3新手教程-应用-跟随

    本文针对如何利用Turtlebot3可实现的各种应用进行讲解 具体步骤如下: [Remote PC]安装应用包 cd ~/catkin_ws/src git clone https://github. ...

  7. mysql 双主复制 windows10

    1. 整体思路 MySQL开始复制是很简单的过程,不过,根据特定的应用场景,都会在基本的步骤上有一些变化.最简单的场景就是一个新安装的master和slave,整个过程如下:(1)在每个服务器上创建一 ...

  8. Linux下Oracle19c离线rpm安装

    一.基础环境配置 1.关闭系统防火墙 systemctl stop firewalld syustemctl disable firewalld 2.关闭selinux vim /etc/selinu ...

  9. Blazor VS 传统Web应用程序

    原文作者: Christian Findlay 原文链接: https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps ...

  10. transmission protocol

    传输层主要定义了主机应用程序间端到端的连通性,它一般包含四项基本功能 . 将应用层发往网络层的数据分段或将网络层发往应用层的数据段合并 建立端到端的链接,主要是建立逻辑连接以传送数据流 将数据段从一台 ...