python3装饰器

装饰器

它允许你修改函数或类的行为,而不更改其源代码。实质上,装饰器是接受另一个函数作为参数并返回一个包装原始函数的新函数。这样,你可以在不修改原始函数的情况下,添加一些额外的功能或逻辑。

def time_cost(func):""":return:"""def wrapper(*args, **kwargs):""":param args::param kwargs::return:"""start = int(time.time() * 1000)func(*args, **kwargs)end = int(time.time() * 1000)print("call api time cost:%s ms" %(end - start))return wrapper
def ntimes(n):def inner(f):def wrapper(*args, **kwargs):for _ in range(n):rv = f(*args, **kwargs)return rvreturn wrapper
return inner#然后你可以使用上述函数包装另一个函数,例如前文中的 add 函数:
@ntimes(3)
def add(x, y):print(x + y)
return x + y

Python中有许多内置的装饰器

例如@staticmethod、@classmethod、@property、@functools.lru_cache、@functools.singledispatch等。你还可以为不同的目的创建自己的自定义装饰器。

闭包函数 

闭包函数就是定义在函数内部的函数,也就是函数的嵌套定义,根据字面意思理解,闭包函数有两个关键字闭和包分别是的封闭和包裹。需要注意的重点是:闭包函数的作用域关系在函数定义阶段就固定死了,与调用位置无关。

1.什么是闭包函数:一个函数的返回值是另外一个函数,返回的函数调用父函数内部的变量,如果返回的函数在外部被执行,就产生了闭包
2.闭包函数的作用:使函数外部能够调用函数内部放入属性和方法
3.闭包函数的优缺点:
    优点:使函数外部能够调用函数内部放入属性和方法
    缺点:闭包操作导致整个函数的内部环境被长久保存,占用大量内存

__closure__属性。Python给内部函数添加了这个属性来携带内部函数用到的外部函数中的变量。

闭包作用

数据隐藏

DRY 原则

闭包

闭包函数使用场景

  1. 封装:这种场景叫做封装。 
  2. 内部函数可以方便的生成新的函数
  3. 装饰器:对Python至关重要。这也是内部函数的主要使用场景。

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

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

相关文章

QML中动态表格修改数据

1.qml文件中的实现代码 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_model…

Java+SpringBoot+Vue.js全栈实践:手机销售网站开发记

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【数据结构和算法初阶(C语言)】顺序表+单链表经典例题图文详解(题解大合集,搭配图文演示详解,一次吃饱吃好)

目录 1.移除链表元素 1.1思路1:遍历删除 1. 2 思路2:尾插法 2.反转链表 3.链表的中间节点 3.1解题思想及过程 3.2快慢指针思想解题---变式:返回链表的倒数第K个节点 4.合并两个有序链表 4.1解题思想 1取小的尾插 5.反转链表 6…

W-TinyLFU 算法实现

前言 不同于常见的 LRU 或 LFU,Window TinyLFU 是一种非常高效的缓存设计方案。先来看下 LRU 和 LFU 算法的缺点: LFU 缺点: 需要为每个记录项维护频率信息,这将消耗大量的内存空间可能存在旧数据长期不被淘汰(一开…

运筹学_1.1.3 线性规划问题-化标准型

1.1.3 线性规划问题-化标准型 一、线性规划模型的标准型(完全展开式)二、线性规划问题的共同特征与建模思路三、线性规划的标准型(三种形式)1、完全展开式2、完全展开式向量化3、完全展开式矩阵化 四、化标准型(完全展…

回溯 Leetcode 47 全排列II

全排列II 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 Leetcode 47 学习记录自代码随想录 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]] 示例 2: 输入&#xff1…

【考研数学】汤家凤1800题什么水平?

作者:气球 链接:https://www.zhihu.com/question/377591845/answer/3415914549 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 汤家凤1800题是我做过的题集中比较简单好上手的了 1800题分为…

新一代电话机器人开源PHP源代码

使用easyswoole 框架开发的 新一代电话机器人开源PHP源码 项目地址:https://gitee.com/ddrjcode/robotphp 代理商页面演示地址 http://119.23.229.15:8080 用户名:c0508 密码:123456 包含 AI外呼管理,话术管理,CR…

PBM学习——从基础到精通!!!

本专栏着重讲解PBM学习所得,学习笔记、心得,并附有视频素材资料,视频详细目录如下: PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相流中次相界面设置2 欧拉多相流曳力1 欧拉多…

住房贷款利息退税笔记

应该缴税了才能退税,如果是学生,没有缴税应该是无法退税的。 产权证明 如果是商品房,没有取得房产证,那就是房屋预售合同 扣除年度 应选择上一年 扣除比例 没有结婚,选否 申报方式

VUE3:省市区联级选择器

一、实现效果 二、代码展示 <template><div class"page"><select v-model"property.province"><option v-for"item in provinces" :key"item">{{ item }}</option></select><select v-model&…

lottie加载带图片的json 预览

背景 产品看到一款app的动效很不错&#xff0c;让我去模仿实现。 第一步 获取apk中的静态资源 拿到这个app的apk后&#xff0c;直接使用压缩工具解压&#xff0c; assets文件夹就是静态资源的目录 静态资源里面有lottie 那么大部分的动效应该都是lottie实现的 网上找了很多…