我们知道,在 Python 中,我们可以像使用变量一样使用函数:

  • 函数可以被赋值给其他变量

  • 函数可以被删除

  • 可以在函数里面再定义函数

  • 函数可以作为参数传递给另外一个函数

  • 函数可以作为另一个函数的返回

简而言之,函数就是一个对象。

对一个简单的函数进行装饰

为了更好地理解装饰器,我们先从一个简单的例子开始,假设有下面的函数:

1
2
def hello():
    return 'hello world'

现在我们想增强 hello() 函数的功能,希望给返回加上 HTML 标签,比如 <i>hello world</i>,但是有一个要求,不改变原来hello() 函数的定义。这里当然有很多种方法,下面给出一种跟本文相关的方法:

1
2
3
4
def makeitalic(func):
    def wrapped():
        return "<i>" + func() + "</i>"
    return wrapped

在上面的代码中,我们定义了一个函数 makeitalic,该函数有一个参数 func,它是一个函数;在 makeitalic 函数里面我们又定义了一个内部函数 wrapped,并将该函数作为返回。

现在,我们就可以不改变 hello() 函数的定义,给返回加上 HTML 标签了:

1
2
3
>>> hello = makeitalic(hello)  # 将 hello 函数传给 makeitalic
>>> hello()
'<i>hello world</i>'

在上面,我们将 hello 函数传给 makeitalic,再将返回赋给 hello,此时调用 hello() 就得到了我们想要的结果。

不过要注意的是,由于我们将 makeitalic 的返回赋给了 hello,此时 hello() 函数仍然存在,但是它的函数名不再是 hello 了,而是 wrapped,正是 makeitalic 返回函数的名称,可以验证一下:

python 守护进程(daemon)on : 会打扮的装饰器相关推荐

  1. Python守护进程daemon实现

    1 守护进程 1.1 守护进程 守护进程是系统中生存期较长的一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行.守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端 ...

  2. Python守护进程 daemon

    守护进程的作用是,我们在linux下运行python程序很多都是在命令行终端中运行的,而通过这样运行的服务其实会变成终端程序的一个子进程.如果ctrl+c退出或者关闭终端,那么服务端程序就会退出.于是 ...

  3. Python实例浅谈之五Python守护进程和脚本单例运行

    一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...

  4. Python守护进程和脚本单例运行

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程 ...

  5. Linux守护进程(daemon)

    0x0:守护进程(daemon) 守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务.很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭.另一些只在需要的时候才启动,完 ...

  6. Python守护进程命令,再也不怕被整蛊了!

    考虑一下利用Python制作一个整蛊.木马软件,我提供思路.(清楚到没学过编程的人也理解) 1.首先一个黑客做一个整蛊或者木马软件,一定不会让你能够关闭它. 2.里面经常会附带欺骗的方法. 3.最终实 ...

  7. python守护进程进程池_Python3标准库:multiprocessing像线程一样管理进程

    Python Python开发 Python语言 Python3标准库:multiprocessing像线程一样管理进程 1. multiprocessing像线程一样管理进程 multiproces ...

  8. python守护进程_Python实现守护进程

    考虑如下场景:你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程.因此如果你关闭了终端,这个命令行程序也会随之关闭. 要使你 ...

  9. python守护进程_让Python脚本成为守护进程

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python daemonizer 类 这是一个Python类,会使你的Python脚本成为守护进程,以使 ...

  10. python守护进程进程池_Python—守护进程管理工具(Supervisor)

    一.前言简介 1.Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程.可以很方便的用来启动.重启.关闭进程(不仅仅是 ...

最新文章

  1. 习题4-11 兔子繁衍问题 (15 分)
  2. HTML/CSS快速入门
  3. fabric 简单理解
  4. OpenGL Lighting models照明模型的实例
  5. 网络协议从入门到底层原理(6)应用层 - 域名、DNS、DHCP、HTTP(ABNF、HTTP报文格式、请求方法、头部字段、状态码、跨域)、代理、CDN
  6. 【AAAI2021】纠结于联合学习中的建模方法?快来看看图网络显式建模!
  7. c语言把文件看作是一个字符序列,C语言对文件的操作
  8. 微信小应用官方开发文档
  9. Thinkphp6 think-queue redis 执行异步任务
  10. Mars 开源月报(2020.3)
  11. (好文重发)朴英敏:用crash工具分析Linux内核死锁的一次实战
  12. 找到自身管理创新支点 振兴物流业
  13. Android 软件开发时用到的一些有用软件列表
  14. 纯CSS3实现常见的时间进度线(竖立方向)
  15. css网页制作的基本步骤,以图例方式介绍CSS制作网页详细步骤
  16. 华南师大教授/教育学博士焦建利力荐《正在爆发的互联网革命》
  17. Django captcha验证码应用【亲测可用】
  18. 蓝桥杯31天冲刺之十一 [java]
  19. 微信公众号粉丝查看增强工具v0.1.12
  20. PPt插入视频同时播放

热门文章

  1. 团队项目第一阶段冲刺站立会议05
  2. iOS UITabBarController
  3. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
  4. ObjectiveC 深浅拷贝
  5. Java日期格式化之线程安全
  6. 牛人也得看的CSS常识
  7. GeoServer不同服务器安装配置、数据发布及客户端访问
  8. Thread 线程基础之-线程池ThreadPool一
  9. 摘自网络上总结出的一些开源的技术
  10. jbpm3.2中jbpm.jpdl.mysql.sql文件运行报错的问题