系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和全局变量]

分类目录:《系统学习Python》总目录


闭包函数(带有外围def作用域引用和嵌套的def)常常可以实现相同的效果,特别是用于像被装饰的最初咱数这样的静态数据时。然而在下面这个例子中,我们也需要外层作用域中的一个计数器,它随着每次调用而改变,而这在Python2.X中是不可能的。在Python2.X中,我们仍可以依据前面文章使用的类和属性,或选择其他方案。使用声明把状态变量移出到全局作用域是一个备选项,并且在Python2.X和Python3.X中都能够工作:

calls = 0def tracer(func):def wrapper(, *args, **kwargs):global callscalls += 1print('call %s to %s' % (calls, func.__name__))return func(*args, **kwargs)return wrapper@tracer
def spam(a, b, c):print(a, b, c)@tracer
def eggs(s, y):print(x ** y)span(1, 2, 3)
span(a=4, b=5, c=6)
eggs(2, 16)
eggs(4, y=4)

遗憾的是,把计数器移出到共同的全局作用域会允许像这样修改它们,这也意味着它们将为每个被包装函数所共享。和类实例属性不同,全局计数器是跨程序的,而不是针对每个函数的一一对于任何跟踪的函数调用,计数器都会递增。如果你比较这个版本与前一个版本的输出,就可以看出其中的区别一一单个并共享的全局调用计数器在每个被装饰函数调用时都会更新,这是不对的:
输出结果

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

{MySQL} 数据库约束 表的关系 新增删除 修改 查询

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库约束1.1约束类型:1.2 NULL约束1.3unique 唯一约束1.4 DEFAULT:默认值约束1.5 PRIMARY KEY:主键约束1.6 FOREIGN K…

Kaggle:数据科学竞赛的殿堂与个人成长的舞台

一、产品简介: 它是一个举办数据科学竞赛、托管数据库、编写和分享代码的在线平台。这个数据集就像一个超级大的信息库,包含了我们日常生活中的各种事情,比如电子游戏的销量啊,还有空气质量如何受到污染等等。这些信息都是现实中…

java面试题20

Java中的类加载机制可继续通过自定义类加载器来实现热部署、插件化和动态加载等功能,使得应用程序能够在运行时加载未知的类和资源。 什么是Java中的多线程(Multithreading)?它有什么作用? 答案:多线程是一…

排查格式化符与待格式化参数不一致导致的程序崩溃问题

目录 1、问题说明 2、初步分析 3、进一步分析 3.1、查看崩溃时的函数调用堆栈

车载毫米波雷达及芯片新趋势研究1--毫米波雷达与其它车载传感器互补,研发及量产门槛较高

1.1 毫米波雷达是利用毫米波电磁波波束工作的雷达,车载是首要应用场景  毫米波雷达是一种以波长位于1-10mm、频率在30-300GHz的电磁波作为放射波的雷达传感器。  毫米波雷达利用毫米波波束进行工作。①检测障碍物时: 直接通过有无回波确认&#xff…

[递归] 指数型枚举

题目描述 ​ 从 1−n 这 n 个整数中随机选取任意多个,每种方案里的数从小到大排列,按字典序输出所有可能的选择方案。 输入 ​ 输入一个整数 n。(1≤n≤10) 输出 ​ 每行一组方案,每组方案中两个数之间用空格分隔。…

06-C++ 类和对象-多态

类与对象 多态 1. 简介 一个事物的多种形态,简称多态。 物的多态 同一个人在不同人面前,角色不同 如: 在父母面前在对象面前在朋友面前在同事面前 事的多态 同一种事情,在不同情况下展现不同 如: 吃饭 中国人 筷子 …

8天狂收6100颗星,可商用!东京工业、麻省理工等开源Stream Diffusion

加州大学伯克利分校、东洋大学、东京工业大学、麻省理工学院和筑波大学等研究人员,联合开源了一款创新性实时交互图像生成框架——Stream Diffusion。 Stream Diffusion的技术创新点在于,将传统的顺序去噪变成流批处理去噪,消除了漫长的等待…

install mpirun

ubuntu install mpirun : sudo apt install mpich centos install mpirun: download mpich-4.1.2.tar.gz from Downloads | MPICH tar xf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --disable-fortran make;make install

vue项目hdr格式文件放在assets下rgbeloader.load获取不到问题解决

如下图 我再App.vue组件中这样写 艾特符号定位 告诉系统 要src下的assets下的xhdr下的xidis.hdr 但是运行项目 他会告诉你找不到这个资源 我们改一下 我们组件时 App.vue 与assets同在 src目录下 用 ./去找 这样也是找不到的 我们需要将它放在静态资源包public下 public路…

JS变量、作用域与内存

JavaScript是一种动态类型语言,它的变量声明和作用域有自己独特的规则。在JavaScript中,变量和作用域与内存管理密切相关,因此本文将深入探讨这些主题,以帮助我们更好地理解JavaScript中的变量、作用域和内存。 变量 在JavaScri…

CDSP考取的价值:成为数据安全认证专家的好处

哈喽IT的朋友们👋,今天想和大家聊聊一个超级有用的专业认证:CDSP,也就是数据安全认证专家。如果你在数据安全领域或者对这方面感兴趣,这个认证绝对值得你去考取哦! 1.🎓提升专业性:获…

MCEWMDRMNDBootstrap.dll文件丢失,软件游戏无法启动,怎样下载修复

不少小伙伴反馈,在打开某些游戏或软件的时候,Windows会提示“MCEWMDRMNDBootstrap.dll文件丢失,软件无法启动”,不知道应该怎样办? 首先,我们先来了解“MCEWMDRMNDBootstrap.dll文件”是什么? …

单片机开发从小工到专家

有道无术,术尚可求;有术无道,止于术 背景 向单片机嵌入式开发小伙伴推荐了几本书,阅读量破10 1. 适用范围 2. 书籍推荐 书籍推荐 3. 大师介绍 大师介绍 4. 大师书籍编写逻辑 25年大师出版的关于:嵌入式单片…

如何破解新版 NVIDIA GRID vGPU License Server (DLS)

文章首发在我的个人网站 http://841973620.net/index.php/archives/dls-cracked.html 前排提醒,闲鱼有不法商家修改许可然后出售的,挂这儿给大家避个雷 众嗦粥汁,新版的licserver不再通过验证MAC地址进行授权,而改为上传本地凭…

Oracle数据库中的基本初始化参数

基本初始化参数就是类型为Basic的初始化参数。大多数数据库只需要设置数据库基本初始化参数即可正确有效地运行。Oracle 建议您熟悉基本参数,并且仅在功能文档指示或特殊情况下使用其他参数。 文档1.2 Basic Initialization Parameters中,列出了27个&am…

wireshark access/trunk/hybrid报文分析

1,access接口 发送带vlan的报文 wireshark交换机配置 [Huawei-GigabitEthernet0/0/1] [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 100 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-Gig…

安卓下Application和Activity的Context获取

情形一:Activity中 通过getApplication()获得Application,其本身也是一个的Context,也可以通过getApplicationContext()获得Application的Context,结果一样。 而this表示当前的Activity对象,其本身也是一个的Context…

(二)linux使用docker容器运行mysql

前言:在上一章安装好linux环境后,开始搭建msyql数据库,之前都是用windows安装mysql的,即使在linux上安装也是用tar解压,然后一堆的配置东西,现在用docker就是爽,几行命令就行 我这里就只放上几…

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目(jar) 1.3、编写 Dockerfile 文件,构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a)简…