首页 > 编程语言 >流畅的python--第九章 装饰器和闭包

流畅的python--第九章 装饰器和闭包

时间:2024-06-07 19:12:28浏览次数:18  
标签:闭包 __ 函数 示例 python clock -- 装饰 def

装饰器基础知识

装饰器是一种可调用对象,其参数是另一个函数(被装饰的函数)。装饰器可能会对被装饰的函数做些处理,然后返回函数,或者把函数替换成另一个函数或可调用对象。
假如有一个名为decorate的装饰器:

@decorate
def target():
  print("running target()")

以下写法与上面的效果一样。

def target():
  print('running target()')

target = decorate(target)

两种写法的最终结果一样:上面两个代码片段执行完毕后,target名称都会绑定decorate(target)返回的函数--可能是原来那个名为target的函数,也可能是另一个函数。
示例9-1 装饰器通常会把一个函数替换成另一个函数

严格来说,装饰器只是语法糖。如前所述,装饰器可以像常规的可调用对象那样调用,传入另一个函数。有时,这样做其实更方便,尤其是做元编程(在运行时改变程序的行为)时。
综上所述,装饰器有以下3个基本性质:

  • 装饰器是一个函数或其他可调用对象
  • 装饰器可以把被装饰的函数替换成别的函数
  • 装饰器在加载模块时立即执行

Python何时执行装饰器

装饰器的一个关键性质是,它们在被装饰的函数定义之后立即执行。这通常是在导入时(例如,当python加载模块时)。
示例9-2 registration.py 模块

registration.py当做脚本运行,得到的输出如下所示。

标签:闭包,__,函数,示例,python,clock,--,装饰,def
From: https://www.cnblogs.com/bonne-chance/p/18237734

相关文章

  • Android设置app开机自启
    Android7.1.1开机自动启动配置在AndroidManifest.xml文件中添加权限<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>在AndroidManifest.xml文件中注册接收广播配置,添加到manifest>application节点下<receiverandroid:name=".MyReceive......
  • 二项式反演小记
    篇幅有限,仅记录公式及极简证明。定义\[\begin{aligned}&f(n)=\sum_{i=0}^n(-1)^i{n\choosei}g(i)\Leftrightarrowg(n)=\sum_{i=0}^n(-1)^i{n\choosei}f(i)&(1)\\&f(n)=\sum_{i=0}^n{n\choosei}g(i)\Leftrightarrowg(n)=\sum_{i=0}^n(-1)^{n+i}{n\cho......
  • PHP CGI Windows下远程代码执行漏洞
    PHPCGIWindows下远程代码执行漏洞CVE编号:CVE-2024-4577危害定级:高危漏洞标签:发布预警公开漏洞披露日期:2024-06-07推送原因:标签更新:[公开漏洞]=>[发布预警公开漏洞]信息来源:https://www.oscs1024.com/hd/MPS-wk9q-5g71漏洞描述PHP是一种在服务器端执......
  • getFaceBox
    '''xgo图形化python库'''importcv2importcv2ascvimportcopyimportargparseimportnumpyasnpimportmediapipeasmpimportshutil,requestsimporturllib.requestimportmathimportos,sys,time,loggingimportspidevasSPI......
  • 第十二天C语言自学笔记
    C语言多文件编程原理 一、C语言多个.c的编译原理分工协作--分离编译器怎么分离.c的编译对每个.c单独进行编译生成目标文件对所有的目标文件进行链接组合 注:每个.c只关心语法是否正确,所有不认识的标签,都在编译时提前声明出来 输出.o文件:gcc-c-omain.omain.c......
  • Mysql阶段二总结
    Mysql阶段二总结文章目录Mysql阶段二总结左外连接右外连接合并查询数据纪录子查询当我们在查询数据时,要求返回所操作表中至少一个表的所有数据记录,通过SQL语句“OUTERJOIN…ON”来实现。外连接数据查询语法形式如下:SELECTfield1,field2,…,fieldnFRO......
  • 百元挂耳式耳机哪款好一点、五款高流量爆款机型值得收藏
    市面上的开放式耳机的制作技术也来越成熟,也很符合人们的所需,小巧美观,音质方面也是杠杆的,并且在佩戴上也有很好的舒适性,在所有耳机市场上也是具备很好的音效,根据不同的技术制作每一款开放式耳机也有其独特的一方,但是还不了解开放式耳机的伙伴怎么去挑选呢?这篇是关于不同品牌的......
  • 小米开放式耳机怎么样?倍思、西圣、小米开放式耳机测评比较!
    作为一名热衷于分享真实体验的博主,我在过去两年开始接触开放式耳机,并因此受到许多朋友的咨询,询问哪款开放式耳机更加出色。为了找出最佳的开放式耳机,我进行了深入的调查和实地测试。我发现高价并不总是代表高质量,而低价也不一定意味着低质量。因此,我投入了大量资金购买了十几款......
  • 2938. 区分黑球与白球 Medium
    桌子上有 n 个球,每个球的颜色不是黑色,就是白色。给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 1 和 0 分别代表黑色和白色的球。在每一步中,你可以选择两个相邻的球并交换它们。返回「将所有黑色球都移到右侧,所有白色球都移到左侧所需的 最小步数」。......
  • vue + springboot 实现Excel模板文件下载
    1、后端实现1.创建用于映射模板的实体类@DatapublicclassSysUserTo{@Pattern(regexp="^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$",message="邮箱格式有误")@Size(max=50,message="邮箱超出50长度&q......