装 饰 器

article/2025/8/27 20:29:05

一,装饰器概念

装饰器本质上还是函数,让其它的函数在不做任何代码修改的情况下,增加额外的功能

所以说一句话:还是函数,记住奥

谈到一个原则:开发封闭原则

概念: 一个以函数作为参数并返回一个替换函数的可执行函数。。装饰器的本质是一个嵌套函数,外层函数的参数是被执行的函数,内层函数是一个闭包并在其中增加新功能(装饰器的功能函数)

这里又提到了闭包,详细了解看这里:

https://mp.csdn.net/mp_blog/creation/editor/123261172

怎么理解?

一个例子:

def f2(func):def f1():x = func()return x + 1return f1
def func():print("输出func()函数")return 1
dec = f2(func)
print(dec())
print(func())

1.函数f2就是一个闭包,传入另一个函数名作为参数。

2.f1()函数为闭包的功能函数,其中调用了func() 函数并将 func( ) 函数的返回值加 1 并返回。

3.每次 f2( ) 函数被调用时,func 的值可能会不同,但无论 func ( ) 代表的何种函数,程序都将调用它.。

4.调用函数dec 和func 函数都将输出 “ func()函数”,dec 返回值为2,func函数的返回值为1。此时称变量dec 是 func 的装饰版。即在 func( ) 函数的基础上增加新的功能。

你这里可以想,你定义的函数返回值为一个函数名,那么在你定义的函数后面再加一个括号是不是就执行的是你函数返回值的函数名的那个函数即:l例如

def f2(func):def f1():return func() + 1return f1
def func():print("输出func()函数")return 1
func = f2(func)
print(func())

二.@符号的使用

上边我们使用变量名将装饰器函数与被装饰函数联系起来。还可以通过@符号和装饰器名实现两者的联系。

示例

def f2(func):def f1():return func() + 1return f1
@f2
def func():print("输出func()函数")return 1print(func())

通过@符号和装饰器名实现装饰器函数与被装饰函数联系,当调用func()函数时,程序会自动调用装饰器函数的代码

三.有参数函数的装饰

示例:

                 f1()函数中的参数必须包含对应func()函数的参数

def f2(func):def f1(a=0, b=0):print(a,b)return func(a,b) + 1return f1
@f2
def func(a=0, b=0):print("输出func()函数")return a + b
print(func(3,5))

四.带参数的装饰器

因为装饰器也是一个函数,即装饰器本身也可以带参数,此时装饰器需要再多一层的内嵌函数。

第一行先定义装饰器函数,由3个函数嵌套而成,最外层函数有一个装饰器自带的参数,内层函数不变,相当于闭包的嵌套

def f3(arg = '装饰器参数'):def f2(func):def f1():print(arg)return func() + 1return f1return f2
@f3("带参数的装饰器")
def func():print("输出func()函数")return 1
print(func())

这里的装饰器相当于函数名作为形参传入另一个函数中形成的函数调用


http://chatgpt.dhexx.cn/article/fXDge9Wv.shtml

相关文章

学习TypeScript20(装饰器Decorator)

Decorator 装饰器是一项实验性特性,在未来的版本中可能会发生改变 它们不仅增加了代码的可读性,清晰地表达了意图,而且提供一种方便的手段,增加或修改类的功能 若要启用实验性的装饰器特性,你必须在命令行或tsconfig…

python装饰器详解

python中的装饰器(decorator)一般采用语法糖的形式,是一种语法格式。比如:classmethod,staticmethod,property,xxx.setter,wraps(),func_name等都是python中的装饰器。 装饰器,装饰的…

【Python】一文弄懂python装饰器(附源码例子)

目录 前言 一、什么是装饰器 二、为什么要用装饰器 三、简单的装饰器 四、装饰器的语法糖 五、装饰器传参 六、带参数的装饰器 七、类装饰器 八、带参数的类装饰器 九、装饰器的顺序 总结 写在后面 前言 最近有人问我装饰器是什么,我就跟他说&#xff…

偏微分方程数值解程序设计与实现——数学基础

常用算子符号 梯度算子 R d \mathbb{R}^d Rd空间中标量函数 u ( x ) u(\bf{x}) u(x),其梯度算子定义如下: g r a d u ( x ) ∇ u ( x ) [ ∂ u ∂ x 0 ∂ u ∂ x 1 ⋮ ∂ u ∂ x d − 1 ] grad u(\mathbf{x})\nabla u(\mathbf{x}) \begin{bmatrix} …

偏微分方程的数值解(六): 偏微分方程的 pdetool 解法

偏微分方程的数值解系列博文: 偏微分方程的数值解(一):定解问题 & 差分解法 偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法 偏微分方程的数值解(三): 化工应用实例 ----------触煤反应装置内温度及转换率的分布 偏微分方程的数值解(四):…

微分方程数值解

一阶问题举例: 高阶问题举例 : 常微分方程数值解:向前欧拉方法之一阶问题 clc,clear,close all; a0;%初始时刻 b2*pi;%结束时刻 n100;%离散点数量 x00;%初值 h(b-a)/n;%步长 xx0 [0:n]*h;%离散点数组 funinline(sin(x)y,x,y); y01; %计算 y(…

常微分方程数值解法1

1.牛顿迭代法 多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。牛顿迭代法使用函数 的泰勒级数的前面几项来寻找方程 的根。牛顿迭代法是求方程根的重要方法之一,其最大…

差分、偏微分方程的解法

这里写目录标题 微分方程数值求解——有限差分法matlab代码差分法的运用(依旧是连续变量——>离散网格点) PDE求解思路demo1demo2 微分方程数值求解——有限差分法 差分方法又称为有限差分方法或网格法,是求偏微分方程定解问题的数值解中…

微分方程数值解法(2)——椭圆型方程的有限差分法

此处参考教材为李荣华的《微分方程数值解法》 使用工具:Matlab 1. 算法:矩形网格上5点差分格式 2. 算法 I.需要求解的函数 function [v,vx,vy,f,aa,bb,cc,dd]u2D(x,y,ft)% ft为方程编号,u1D为精确解函数u(t),注意与…

基础数学(8)——常微分方程数值解法

文章目录 期末考核方式基础知识解析解(公式法)解析解例题(使用公式法,必考)解析解的局限性 数值解数值解的基本流程 显示Euler法显示欧拉(差值理解)显示欧拉(Taylor展开理解&#xf…

微分方程数值解法(1)——常微分方程初值问题的数值解法

此处参考教材为李荣华的《微分方程数值解法》 使用工具:Matlab 1. 算法 注: 最后一行应为k4,上面为笔误 2. 算法 I.需要求解的函数 function ff1D(t,u,ft)% ft为方程编号,u1D为精确解函数u(t),注意与f1D对应右端项函数f(t,u(t))switch ftcase 1 %P10…

偏微分方程数值解法pdf_天生一对,硬核微分方程与深度学习的联姻之路

机器之心原创 作者:蒋思源 微分方程真的能结合深度神经网络?真的能用来理解深度神经网络、推导神经网络架构、构建深度生成模型?本文将从鄂维南、董彬和陈天琦等研究者的工作中,窥探微分方程与深度学习联袂前行的路径。 近日&…

椭圆型偏微分方程数值解法

一、 一维椭圆方程数值解 matlab代码&#xff1a; function chap2_fdm_elliptic_1D % 一维椭圆方程求解(常微分方程边值问题) % -u q(x)u f(x), 0<x<1, 取q(x) x, f(x) (x-1)exp(x) % u(0) 1, u(1) e; 边界条件 % 真解为 u exp(x)N 20; h 1/N; x_al…

Python小白的数学建模课-11.偏微分方程数值解法

偏微分方程可以描述各种自然和工程现象&#xff0c; 是构建科学、工程学和其他领域的数学模型主要手段。 偏微分方程主要有三类&#xff1a;椭圆方程&#xff0c;抛物方程和双曲方程。 本文采用有限差分法求解偏微分方程&#xff0c;通过案例讲解一维平流方程、一维热传导方程…

偏微分方程数值解法pdf_单摆-微分方程浅谈

引子[1] 单摆&#xff0c;这个在中学物理都学过的东西&#xff0c;应该是非常熟悉了。 图片来源-维基百科 小角度简单摆 若最高处( )的绳子和最低处(速度最大值)的绳子的角度为 &#xff0c;则可使用下列公式算出它的振动周期。 公式证明 摆球受力分析 绳与对称线夹角为 &…

偏微分方程数值解法pdf_数值模拟偏微分方程的三种方法:FDM、FEM及FVM

偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM)、有限元方法(FEM)、有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较。 一.有限差分方法 有限差分方法(Finite Difference Methods)是数值模拟偏微分方程最早采用的方法,至今仍被广泛运用。该方法包括区…

正圆锥体空间方程_数值模拟偏微分方程的三种方法:FDM、FEM及FVM

偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM)、有限元方法(FEM)、有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较。 一.有限差分方法 有限差分方法(Finite Difference Methods)是数值模拟偏微分方程最早采用的方法,至今仍被广泛运用。该方法包括区…

抖音图标

抖音图标&#xff1a; 1.创建一张画布&#xff0c;再用圆角矩形工具创建一个圆角矩形 2.新建一个图层&#xff0c;用椭圆选框工具创建一个圆&#xff0c;再alt键从选区减去一个圆 3.再填充一个颜色&#xff0c;再剪切1/4圆接着粘贴拖拽至右上方 4.新建一个图层&#xff0c;用…

抖音图标——ps

抖音图标 1.用圆角矩形工具画个圆角&#xff08;空格键可以移动&#xff09;&#xff0c;填充为黑色&#xff0c;把此图层转换为珊格式化 2.再新建一个图层&#xff0c;用椭圆选框工具画个换个环&#xff08;用alt会出现&#xff0c;shift会出现加号&#xff09; 3.Ctrlx剪…

抖音软件分析

前几天看了看关于短视频软件的火的一些话题&#xff0c;就去看了看关于抖音的&#xff0c;对于抖音是那几个方面&#xff0c;自己也去做了一些分析&#xff0c;首先是在两个方面去做的一个理解&#xff0c;一个是软件制作&#xff0c;一个是商业运营。 软件制作 在抖音的软件…