Python语法装饰器

news2024/11/23 18:28:42

参考:

  • 【【python】装饰器超详细教学,用尽毕生所学给你解释清楚,以后再也不迷茫了!-哔哩哔哩】 https://b23.tv/Y6Ss8cN
  • 【Python小技巧:装饰器(Decorator)-哔哩哔哩】 https://b23.tv/hacMmem

x.1 Python中的Abstract Decorator抽象装饰器

python中任何东西都是object对象,而任何object都有一个CALL_FUNCTION,即当你使用1()其实会调用1CALL_FUNCTION。这个和类的实例化对象transform()不一样,他是调用__call__这个magic method。常见的built-in function和magic method对应关系。

__len__是magic method,而len()是built-in function。

请添加图片描述

所以function也可以作为输入传入

def double(x):
    return x * 2

def triple(x):
    return x * 3

def calc_number(func, x):
    print(func(x))

calc_number(double, 3)
calc_number(triple, 3)

同样函数的返回值也可以是一个函数

def get_multiple_func(n):

    def multiple(x):
        return n * x
    
    return multiple

double = get_multiple_func(2)   # <=> double = multiple, while double(3)=multiple(3)
triple = get_multiple_func(3)

print(double(3))
print(triple(3))

一个极简的Abstract decorator如下,decorator本质上是一个输入输出都是函数的函数

# 一个极简的Abstract decorator如下,decorator是一个输入输出都是函数的函数:
def dec(f):
    pass

@dec
def double(x):
    return x * 2

# 等价于如下:
double = dec(double)

x.2 Python中的Base Decorator正常装饰器

一个正常的base decorator如下

# 一个正常的base decorator如下::如我们要完成计算时间的功能
import time
def display_time(func):
    def wrapper():
        t1 = time.time()
        func()
        t2 = time.time()
        print(t2 - t1)
    return wrapper

@display_time
def count():
    count = 0
    for i in range(1000):
        count += 1

count()

增加返回值功能

# 增加返回值功能
def display_time_return(func):
    def wrapper():
        t1 = time.time()
        result = func()
        t2 = time.time()
        print(t2 - t1)
        return result
    return wrapper

@display_time_return
def count_return():
    count = 0
    for i in range(1000):
        count += 1
    return count

result = count_return()
print(result)

增加返回值和传递参数功能

# 增加返回值和传递参数功能
def display_time_return_param(func):
    def wrapper(*args, **kwargs):
        t1 = time.time()
        result = func(*args, **kwargs)
        t2 = time.time()
        print(t2 - t1)
        return result
    return wrapper

@display_time_return_param
def count_return_param(count_num=10000):
    count = 0
    for i in range(count_num):
        count += 1
    return count

result = count_return_param(count_num=200000)
print(result)

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

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

相关文章

探索云原生技术的优势和挑战

文章目录 探索云原生技术的优势和挑战一、云原生技术简介二、云原生技术的优势1. 弹性和可伸缩性2. 高可用性3. 快速迭代和部署4. 更好的安全性和可靠性 三、云原生技术的挑战1. 复杂性2. 安全风险3. 成本 四、总结 结语 探索云原生技术的优势和挑战 随着云计算技术的快速发展…

数字城市发展下的技术趋势,你知道多少?

提到数字城市、智慧城市大家都会感觉经常在耳边听到&#xff0c;但是要确切说出具体的概念还是有一点难度的。具体来说&#xff1a;数字城市是一个集合多种技术的系统&#xff0c;以计算机技术、多媒体技术和大规模存储技术为基础&#xff0c;以宽带网络为纽带&#xff0c;运用…

【JavaScript】ES6新特性(2)

5. 字符串扩展 5.1 includes函数 判断字符串中是否存在指定字符 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name&q…

2023年湖北安全员C证C3学历不够可以报考吗 ?个人如何报考?

2023年湖北安全员C证C3学历不够可以报考吗 &#xff1f;个人如何报考&#xff1f; 2023年建筑施工企业三类人员住建厅安全员C证报考是有一定要求的&#xff0c;很多人条件达不到是不是就不能报考&#xff0c;个人想要报考建筑安全员C证怎么去报名等一系列问题。其实都是可以解决…

云渲染与本地渲染:哪个最好?

我们过去曾指出&#xff0c;本地渲染动画和电影的 2D 或 3D 项目是一个非常耗时且计算密集型的过程。当在场景中使用未优化的几何体或在最终渲染中使用多多边形模型时&#xff0c;诸如此类的变量最终将增加完成单个渲染所需的时间和处理器能力。 为什么渲染需要这么长时间&…

keepalived搭建配置

首先&#xff0c;在搞keepalived的时候&#xff0c;一般都是一主一备&#xff0c;所以需要2台设备。这两台设备&#xff0c;要一致&#xff0c;我之前是用了一台centos&#xff0c;一台ubuntu&#xff0c;然后&#xff0c;搞完以后发现&#xff0c;不管是主还是备都持有vip&…

108.(cesium篇)cesium初始定位动画

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <

大学生社团管理系统的设计与实现(论文+源码)_kaic

在网络迅速发展的时代&#xff0c;众多软件被开发出来&#xff0c;给社团的管理带了极大的便利&#xff0c;而学生随着时代的发展越来越最求更加个性化的需求。以此&#xff0c;现在的社团管理以学生为导向&#xff0c;根据学生的需求开发一个适合现代化的大学生社团管理系统&a…

Pytest技巧大揭秘:编写高质量接口自动化测试

目录 前言&#xff1a; 一、Pytest测试框架简介 二、安装Pytest测试框架 三、编写Pytest测试用例 四、Pytest参数化&#xff08;Parameterization&#xff09; 五、Pytest插件的使用 六、总结 前言&#xff1a; 在软件开发中&#xff0c;接口的测试是非常重要的一环。接…

Linux服务器安装MYSQL

安装MYSQL 涉及到的工具及软件连接 链接&#xff1a;https://pan.baidu.com/s/1r577kFeuojUrMoEUn88B8w 提取码&#xff1a;xh93 查看是否已经安装了mariadb 检查linux是否安装了mariadb数据库&#xff0c;mariadb数据库是mysql的分支。是免费开源的。mariadb和msyql会有冲突…

准备半个月,面试5分钟不到就凉了,问的实在太····

从外包出来&#xff0c;没想到竟然死在了另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以我也就忍了。没想到12月一纸通知&#xff0c;所有人都不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个…

django ORM框架(操作数据库)第一章

目录 一、ORM框架介绍 二、Django配置数据库 2.1 在本地mysql中创建数据库与用户 2.2 django 连接本地mysql(安装mysqlclient及依赖环境&#xff09;mac安装 三、模型类 3.1、创建模型类&生成迁移脚本&执行迁移脚本 3.2 类属性&表字段介绍 3.2.1 models.Ch…

惊人!2022年我国游戏直播用户规模高达3.82亿人,市场规模1108亿元

随着人们生活水平的提高&#xff0c;人们对娱乐和文化活动的需求也在日益增加&#xff0c;而互联网的快速发展便捷地提供了各种各样丰富多彩的文化和娱乐&#xff0c;也为电子竞技提供了线上直播观看功能&#xff0c;游戏直播逐渐成为社会重要的文化之一。 近年来&#xff0c;…

如何恢复被删除的文件?文件恢复,4招解决!

案例&#xff1a;如何恢复被删除的文件&#xff1f; 【我的一些非常重要的文件保存在电脑中&#xff0c;刚刚一不小心被我删除了&#xff01;请问大家有什么比较可行的被删文件恢复方法吗&#xff1f;】 文件被误删了无法找回会给我们造成很多不便&#xff0c;尤其是重要的文…

JVM 垃圾回收器

GC 分类与性能指标 垃圾收集器概述: 垃圾收集器没有规范中进行过多的规定&#xff0c;可以由不同的厂商、不同版本的 JVM 来实现由于 JDK 的版本处于高速迭代过程中&#xff0c;因此 Java 发展至今已经衍生了众多的 GC 版本从不同角度分析垃圾收集器&#xff0c;可以将 GC 分…

基于语音芯片NV080C方案制作的血氧仪为何实用

随着现代生活水平的提高&#xff0c;人们越来越注重自身的健康状况&#xff0c;而检测血氧和心率数据&#xff0c;成为人们更加重视的健康检测手段之一。血糖仪作为现代化的健康工具&#xff0c;它可以帮助人们更好地了解自己的血糖水平。为方便使用&#xff0c;在血糖仪中加入…

渗透测试--6.1.aircrack-ng破解wifi密码

目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一&#xff1a;虚拟机连接实验需要用到的网卡 步骤二&#xff1a;设置网卡为监听模式 步骤三&#xff1a;使用wlan0mon网卡扫描附近wif…

Cinema 4D的最佳渲染引擎有哪些?

Cinema 4D是一款专业的3D建模、动画、模拟和渲染软件解决方案。其快速、强大、灵活和稳定的工具集使设计、动态图形、VFX、AR/MR/VR、游戏开发和所有类型的可视化专业人士更容易和高效地使用3D工作流程。除了Cinema 4D附带的标准/物理渲染引擎之外&#xff0c;还有许多用于C4D和…

Android实例——拼图游戏

拼图游戏 项目简介权限adapterPictureListAdapterPuzzleAdapter beanItemBean PresenterIPuzzlePresenterPuzzlePresenterImpl uiIGameCallback utilsConstantImagesUtilsScreenUtils ViewMainActivityPuzzleActivity 布局activity_main.xmlactivity_puzzle.xml 项目简介 选择…

国内 无需科学上网 免费体验 ai 语言交互平台 chatpgt替代(汇总)

ChitGPT CSDN 基于chatgpt 3.5模型 ChitGPT AI EDU - Learn AI, Use AI https://ai.aigcfun.com/ 之前有web端的 现在只有app 和桌面端 通义千问 阿里 通义千问 还没通过审核 360 智脑 360 智脑 体验名额满了 sparkDesk 讯飞 sparkDesk 还没通过审核 文心一言 百度…