Python学习基础笔记七十六——Python装饰器2

news2024/12/28 18:23:53

装饰器,英文名字decorator。

我们开发Python代码的时候,经常碰到装饰器。

通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。

通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢?

假设,你进入一家公司,领导要求你在老代码的基础上继续开发。

import time
def getXXXTime():
    return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())

import time

# 定义一个装饰器函数
def sayLocal(func):
    def inner():
        ret = func()
        return f'当地时间: {ret}'
    return inner


def getXXXTime():
    return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())

# 装饰getXXXTime()
getXXXTime = sayLocal(getXXXTime)

print(getXXXTime())

 

我们再看下之前的装饰器的通用模板:

def wrapper(f):                    # 装饰器wrapper
    def inner(*args, **kwargs):  
        '''在装饰前要做的事情'''  
        ret = f(*args, **kwargs)   # 被装饰的函数
        '''在装饰后要做的事情'''
        return ret
    return inner

@wrapper                           # 装饰器函数名
def func(a, b):                    # 被装饰的函数

import time

# 定义一个装饰器函数
def sayLocal(func):
    def inner():
        ret = func()
        return f'当地时间: {ret}'
    return inner

@sayLocal
def getXXXTime():
    return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())

# 装饰getXXXTime()
# getXXXTime = sayLocal(getXXXTime)

print(getXXXTime())

sayLocal函数是一个装饰器,它装饰了参数函数的行为。

以@sayLocal开头后面接装饰器函数的这种写法,是一种语法糖,也就是便捷的写法。

装饰器经常被用在库和框架中,给别的开发者使用。

这些库的开发者预料到 使用者 开发的函数可能需要 一些增强的功能。

但是 这些库的开发者 没法去改使用者的代码, 就可以把这些增强的部分做在 装饰器函数中。

这样使用者,只需要在他们的函数前面上@xxx 就使用了这些增强的功能了。

开放封闭原则:

1)多拓展是开放的;

2)对修改是封闭的;

目的是维护代码的稳定性,这个就是装饰器存在的意义。

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

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

相关文章

Unity 镜面反射

放置地板和模型 首先,让我们放置地板和将放置在其上的 3D 模型。这次,我使用 Plane 作为地板。从层次视图中选择“创建”→“3D 对象”→“平面”。我们还在地板上放置了 Unity-chan、Cube 和 Sphere。 接下来,创建地板的材质。在项目视图中…

安装 Dispatch 库

首先,我们需要安装 Dispatch 库。在命令行中运行以下命令来安装 Dispatch: $ sbt console然后,在 Scala 控制台中,导入所需的库: import dispatch._接下来,我们需要设置代理服务器。在 Dispatch 中&#…

个性联邦学习

Towards Personalized Federated Learning 一、背景二、解决策略 2.1 策略一.全局模型个性化2.2 策略二.学习个性化模型 三、具体方案 3.1 全局模型个性化 3.1.1 基于数据:减少客户端数据统计异构性3.1.2 基于模型:在学习一个强大的全局模型,…

014 - ARM64上的GIC-400(GICv2)

本章节涉及到的参考文档有三个: BCM2711 ARM Peripherals.pdfARM Generic Interrupt Controller Architecture Specification.pdf (简称gic_v2)CoreLink GIC-400 Generic Interrupt Controller Technical Reference Manual.pdf 1. GIC 发展历史 在早期的 ARM 系统…

睿趣科技:抖音小店新手运营攻略

随着短视频平台的兴起,抖音已经成为了一个炙手可热的营销工具。越来越多的商家选择在抖音上开设小店,以此来拓展自己的业务。那么,作为新手,如何运营好自己的抖音小店呢?本文将为您提供一些实用的建议。 首先,要明确自…

python实现图片与视频转换:将视频保存为图片,将批量图片保存为视频

1、将视频保存为图片 1.1 完整代码 # -*- coding: utf-8 -*- import cv2 import os cap cv2.VideoCapture(TestFiles/2.mp4) index 0 prop cv2.CAP_PROP_FRAME_COUNT total int(cap.get(prop)) # 获取视频总帧数 while(cap.isOpened()):# ret返回布尔值ret, frame cap.r…

竹云荣膺2023十大数字化转型创新企业

10月14日上午,“2023DTWORLD国际数字科技领袖峰会/ IDI Award 数创奖颁奖盛典”在深圳会展中心(福田)2号馆成功举办。本届峰会由深圳市科学技术协会等相关政府部门指导,由深圳市科技交流服务中心、深圳市人工智能行业协会、湾盟产…

医疗终端札记

文章目录 一、打印Windows 下打印 PDF打印 Word转换格式 一、打印 Windows 下打印 PDF 从 Windows 命令行打印 PDF AcroRd32.exe /t "C:\Path\To\Your\File.pdf" "PrinterName" # 其中,“C:\Path\To\Your\File.pdf”是您要打印的PDF文件的完…

嵌入式软件开发笔试面试

C语言部分: 1.gcc的四步编译过程 1.预处理 展开头文件,删除注释、空行等无用内容,替换宏定义。 gcc -E hello.c -o hello.i 2.编译 检查语法错误,如果有错则报错,没有错误则生成汇编文件。 gcc -S hello.i -o h…

在线录音工具分享,总有一款适合你!

“有人知道怎么在线录音吗?在网页上播放了一首民谣,觉得旋律很好听,但是不能下载,就想用录音的方式记录下来,可是完全不会操作,真的很急!有没有好心人教教我,谢谢!” 随…

衍射:经典波动行为

一、说明 在本页中,我将尝试引导您了解光背后的基础知识。光是粒子还是波? 衍射是与光传播偏差相关的现象的通用名称,与几何光学预测的偏差(即光的直线传播)有关,它揭示了光的性质波而不是微粒物质。 图1&a…

为T507-H开发板配置Samba服务,实现跨系统的文件共享——飞凌嵌入式

作为一款经典的国产芯,全志T507-H芯片被广泛应用于车载电子、电力、医疗、工业控制、物联网、智能终端等诸多领域当中,而在各种复杂的嵌入式Linux应用场景当中,“打通ARM板卡与Windows设备间的壁垒以实现跨平台的文件共享”是一项不能被忽视的…

IStoreOS结合内网穿透软件Cpolar实现公网远程访问

文章目录 前言1. ssh局域网登陆iStoreOS系统2. 安装Cpolar内 网穿透软件3. 测试公网远程链接4. 公网使用固定http地址远程访问iStoreOS webui界面 前言 iStoreOS系统是基于OpenWrt定制的软路由系统,提供了如轻nas,云盘,文件共享等众多网络服务…

21款奔驰EQC350升级原厂360全景影像 感受上帝视野

您是否经历过这种场面呢? 停车位,狭窄障碍停车困难 避免盲区,倒车盲区危及生命安全 狭窄路段,无法判断是否安全通过 视角盲区,小孩站在视野盲区看不到,Xjh15863 360度无缝3D全车可见,解决各…

最新《中国环境统计年鉴》2001-2022年-EXCEL面板数据

数据简介:本数据汇集全国31个省、直辖市环境方面的面板数据,涵盖自然状况、水环境、海洋环境、大气环境、固体废物、自然生态、土地利用、林业、自然灾害及突发事件、环境投资、城市环境、农村环境等11个一级指标,数百个二级、三级指标。通过…

照片后期编辑工具Lightroom Classic 2024 mac中文新增功能

Lightroom Classic 2024(lrC2024)是专为摄影爱好者和专业摄影师设计的软件,它提供了全面的照片编辑工具,可以精准调整照片的色彩、对比度和曝光等参数,以便定制后期处理效果。 在lrC2024中,用户体验得到了提…

【Mysql】Mysql中的B+树索引(六)

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成,然后各个数据页之间可以组成一个双向链表 ,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 ,每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…

随着Telegram的崛起,这些特性和运营方法你得知道~

截止至2023年6月,Telegram已成为除了WhatsApp之外全球苹果应用商店中用户下载量最多的社交网络应用,这个新兴的社媒平台正在逐渐扩大它的影响力。Telegram的崛起也意味着出现了新的商机,要怎么把握这个热门社媒来进行营销也成了各出海企业最关…

MapGIS 10.6 Pro新品发布!加速地理信息领域核心技术国产替代

10月18日,国产GIS软件厂商中地数码在深圳举办“时空筑基智绘九州”新品发布会,正式推出新一代全空间智能GIS升级之作——MapGIS 10.6 Pro。来自全国各地的地理信息产业专家学者汇聚一堂,共话地信科技自立自强,助推产业高质量发展。…

Steam中如何设置HTTP服务器防封

要在 Steam 中设置HTTP服务器,请按照以下步骤操作: 1、打开 Steam 客户端。 2、点击“设置”(即齿轮图标),然后选择“网络”。 3、在“网络”页面中,找到“HTTP服务器”部分。 4、首先,将“使…