函数装饰器基础

1 函数装饰器基础

1.1 函数调用

描述

根据之前文章《python函数属性和注解》得知,python函数定义时生成函数对象并赋值给了函数名。

调用方式:

(1)直接调用方式为:通过函数名+圆括号()调用函数,比如f1()。

(2)将函数名赋值给一个变量后,通过变量名()进行间接调用。

(3)将函数作为入参传给另一个函数后,在另一个函数内部调用。

示例

>>> def echo(msg):print(msg)#直接调用函数 
>>> echo('直接调用')
直接调用
#赋值给其他变量,间接调用
>>> c=echo
>>> c('间接调用')
间接调用
>>> def indirect(func,arg):func(arg)
#作为入参   
>>> indirect(echo,'作为函数入参调用')
作为函数入参调用

1.2 嵌套函数

描述

函数f1内部定义函数f2,这就定义了一个嵌套函数。

通过之前文章《python作用域基础知识》得知,函数外是不可直接访问函数内部的变量的(因为函数执行完后函数内部变量就释放消失了),所以,如果需要调用内部函数f2,则需要将f2返回。

def f1():def f2():passreturn f2

示例1

函数外不可访问函数内变量

>>> def f1():X='梯阅线条'def f2():print(X)
>>> f1.f2
Traceback (most recent call last):File "<pyshell#2>", line 1, in <module>f1.f2
AttributeError: 'function' object has no attribute 'f2'
>>> f1().f2
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>f1().f2
AttributeError: 'NoneType' object has no attribute 'f2'

示例2

函数内部调用嵌套的内部函数。

>>> def f1():X='梯阅线条'def f2():print(X)f2()
>>> f1()
梯阅线条

示例3

返回内部函数后,在外面调用内部函数。

>>> def f1():X='梯阅线条'def f2():print(X)return f2
>>> f3=f1()
>>> f3()
梯阅线条

1.3 函数装饰器基础

用法

# 定义一个嵌套函数(闭包函数)
def my_decorator(func): # 将被装饰的函数作为入参def my_wrapfunc(*args,**kargs):pass    # 做一些额外逻辑处理进行装饰func(*args,**kargs) # 调用被装饰的函数pass    # 做一些额外逻辑处理进行装饰return my_wrapfunc  # 返回内部函数供外面继续调用被装饰的函数
def f1(msg):pass
# 调用
f1=my_decorator(f1)
f1(msg)

描述

函数装饰器也是一个函数,它对被装饰的函数进行调用,并且做一些额外的逻辑处理。不改变被装饰函数的原有逻辑。

函数装饰器是一个嵌套函数,

(1)定义一个入参用于接收被装饰的函数;

(2)定义一个内部函数,并且返回这个内部函数,供外面函数调用;

(3)内部函数实现额外逻辑处理,并且调用被装饰函数的函数;

示例

>>> def my_decorator(func):def my_wrapfunc(*args,**kargs):print('装饰器例子')func(*args,**kargs)return my_wrapfunc>>> def f1(msg):print(msg)
>>> f1=my_decorator(f1)
>>> f1('梯阅线条')
装饰器例子
梯阅线条

1.4 函数装饰器使用@

用法

# 定义一个嵌套函数(闭包函数)
def my_decorator(func): # 将被装饰的函数作为入参def my_wrapfunc(*args,**kargs):pass    # 做一些额外逻辑处理进行装饰func(*args,**kargs) # 调用被装饰的函数pass    # 做一些额外逻辑处理进行装饰return my_wrapfunc  # 返回内部函数供外面继续调用被装饰的函数
@my_decorator   # 相当于 f1=my_decorator(f1)
def f1(msg):pass
# 调用
f1(msg)

描述

直接在函数定义def上面一行用“@装饰器函数名”即可。

比如,

@my_decorator

def f1**(msg):pass**

相当于 f1=my_decorator(f1)

调用时,直接调用被装饰函数名即可。

示例

>>> def my_decorator(func):def my_wrapfunc(*args,**kargs):print('装饰器例子')func(*args,**kargs)return my_wrapfunc
>>> @my_decorator
def f1(msg):print(msg)
>>> f1('梯阅线条')
装饰器例子
梯阅线条

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

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

相关文章

Xcode 15 Assertion failed: (false “compact unwind compressed function offset doesn‘t fit in 24

xcode 真机运行报错&#xff1a;Assertion failed: (false && "compact unwind compressed function offset doesnt fit in 24 bits"), function operator(), file Layout.cpp, line 5758 如下图&#xff1a; 解决办法&#xff1a; 在 targets-->Build …

力扣---最长回文子串(动态规划)

目录 ​编辑 题目 思路步骤&#xff1a; 代码 我的其他博客 题目 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&…

【C++】标准库中的string类

目录 一、介绍 二、常用接口 1.构造函数和赋值操作 2.string类对象的容量操作 3.string类对象的访问及遍历操作 4.string类对象的修改操作 5.string类非成员函数 放在最后 一、介绍 在C中&#xff0c;std::string 是标准库提供的字符串类。它属于 <string> 头文件…

ROS机器人入门

http://www.autolabor.com.cn/book/ROSTutorials/ 1、ROS简介 ROS 是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统&#xff0c;其 底层的任务调度、编译、寻址等任务还是由 Linux 操作系统完成&#xff0c;也就是说 ROS 实际上是运 行在 Linux 上的次级…

MySQL主从复制详解

目录 1. 主从复制的工作原理 1.1. 主从复制的角色 1.2. 主从复制的流程 2. 配置MySQL主从复制 2.1. 确保主服务器开启二进制日志 2.2. 设置从服务器 2.3. 连接主从服务器 2.4. 启动复制 3. 主从复制的优化与注意事项 3.1. 优化复制性能 3.2. 注意复制延迟 3.3. 处理…

Broken pipe

1. 请解释什么是Broken pipe错误&#xff0c;以及它是如何发生的&#xff1f; Broken pipe错误通常发生在网络编程中&#xff0c;比如在使用socket编程时&#xff0c;当客户端发送了一个请求&#xff0c;但是服务器已经关闭了连接或者在客户端发送数据时&#xff0c;网络连接出…

多进程间通信学习之信号灯集(信号量数组)

信号灯集&#xff08;信号量数组&#xff09;&#xff1a;1、实现进程同步的机制&#xff1b;2、在一个信号灯集中&#xff0c;可以有很多信号灯&#xff1b;3、这些信号灯集中的信号灯相互独立&#xff0c;每个灯的值的改变都不会影响到其他的信号灯&#xff1b;4、信号灯的值…

adb setting设置

设置主页面 adb shell am start com.android.settings/com.android.settings.Settings 安全 adb shell am start com.android.settings/com.android.settings.SecuritySettings 手机无线信息 adb shell am start com.android.settings/com.android.settings.RadioInfo 更…

买显卡别再只看N、A两家了,这些高性价比I卡也很香

谈起独立显卡&#xff0c;相信不少朋友都会第一时间想起NVIDIA与AMD这两家巨头。然而&#xff0c;除了这两家巨头以外&#xff0c;凭借集显占据全球最高显卡市场份额的英特尔在2021年正式入局了独显市场&#xff0c;并在去年9月的时候公布了Arc A系列显卡阵容&#xff0c;型号从…

算法——动态规划(DP,Dynamic Programming)

一、基础概念 DP的思想&#xff1a; 把问题分成子问题&#xff0c;前面子问题的解决结果被后面的子问题使用DP与分治法的区别&#xff1a; 分治法把问题分成独立的子问题&#xff0c;各个子问题能独立解决 自顶向下DP前面子问题的解决结果被后面的子问题使用&#xff0c;子问题…

【基于APB总线的DES实现】

基于APB总线的DES实现 本文内容摘要APB介绍仿真结果整体仿真写入数据DES加密部分DES加密读出密文 整体代码 本文内容摘要 本文是设计一个可兼容APB总线的DES加密协处理器&#xff0c;用来将DES加密模块与APB总线进行对接&#xff0c;使总线发送来的数据可以正常写入并进行加密后…

Autosar DEM DTC的Debounce策略

文章目录 简介Debounce策略1、基于计数器的 Debounce 策略2、基于时间的Debounce策略 简介 故障事件防抖&#xff0c;与按键防抖&#xff08;软件需要延时确认按键不是误触发&#xff09;的作用类似&#xff0c;目的是为了防止事件误触发采取的策略。 因为DTC并不是一达到触发…

65道Go基础高频题整理(附答案背诵)

说明一下Golang 中 make 和 new 的区别&#xff1f; 好的&#xff0c;关于 make 和 new 在 Go 语言中的区别&#xff0c;我来解释一下。 new 函数的作用&#xff1a; new(T) 函数会为 T 类型的新项分配零值内存&#xff0c;并返回其地址&#xff0c;即一个 *T 类型的值&#x…

产品调研——AI平台

本文主要记录了对腾讯云-TIONE平台、华为云-ModelArt等主流AI平台的产品调研。 交互式建模 简单点说就是提供了带训练资源的云IDE&#xff0c;使用形态包括Notebook、VsCode等。 腾讯云-TI平台 TI平台将tensorflow、pytorch、spark环境等均集成到一个Notebook容器中&#xf…

Android 一分钟使用RecyclerView完美实现瀑布

【免费】安卓RecyclerView瀑布流效果实现资源-CSDN文库 1.WaterfallFlowActivity 主函数代码&#xff1a; package com.example.mytestapplication;import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.widget.Toast;im…

Git总结 | Git面试都问些啥?

什么是Git为什么要用Git等等这些相信看到该标题点进来的同学也不希望浪费时间再看一遍&#xff0c;那么直接进入主题&#xff0c;对于日常工作中常用的Git相关操作进行整理&#xff0c;一起看看吧 面试官&#xff1a;你常用的Git操作是什么? 候选人&#xff1a;git clone 面试…

59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。 题目描述如下&#xff1a; 首先拿到这道题&#xff0c;首先不要慌张&#xff0c;我们来仔细分析一下会发现并没有那么难。 首先看下边界的元素是1、2、3递增的&#xff0c;那么我们也许可以根据这一点先把边界的元素一个一个给…

【Proteus仿真】【51单片机】视力保护仪

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使LCD1602液晶&#xff0c;按键、HC-SR04超声波、PCF8591 ADC、光敏传感器、蜂鸣器、LED等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示…

【vtkWidgetRepresentation】第十四期 二维标注

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtk中的二维标注,主要用于医学领域,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. vtkBiDimension…