2020-10-10

2023-11-06

闭包和装饰器

1、高阶函数

  • 接收函数作为参数是高阶函数
  • 将函数作为返回值返回的函数就是高阶函数

2、匿名函数

  • lambda函数(无名函数)
  • 语法:lambda 参数列表:表达式
  • filter()函数(过滤列表)
    • 第一个参数:函数
    • 第二个参数:序列

3、闭包
能够读取其他函数内部变量的函数。可以理解为函数嵌套函数,将函数内部和函数外部连接起来的桥梁。

作用:

  • 闭包可以保存外部函数的变量,不会随着外部函数调用完而销毁
  • 可以将一些私有数据藏到闭包里
  • 可以通过闭包创建一些只有当前函数能访问的变量

形成闭包的条件:

  1. 函数嵌套
  2. 将内部函数作为返回值返回
  3. 内部函数必须要使用到外部函数的变量

注意:由于闭包引用了外部函数的变量(参数),则外部函数德变量不会被释放,占用内存!

4、装饰器(Decorators)

  • 如果直接修改函数的代码来完成需求,会产生很多问题,例如:重复修改代码等
  • 装饰器的作用就是避免了修改原函数而能达到自己修改代码的需求,定义新的函数来装饰原函数,其就是一个闭包
  • 简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短

装饰器的语法糖写法(即使用更方便了),默认对下一个函数有效,最近的先起作用,@ 符号就是装饰器的语法糖,它放在函数开始定义的地方,这样就可以省略最后一步再次赋值的操作。

@fn
def speak()

这里@fn作用即为fn()传入参数speak,等于fn(speak),有了 @ ,我们就可以省去r = fn(speak)这一句了,直接调用 speak() 即可得到想要的结果。

  • @wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。
  • 装饰器还有更大的灵活性,例如带参数的装饰器,*args和**kwargs
  • @functools.wraps(func),这是python提供的装饰器。它能把原函数的元信息拷贝到装饰器里面的 func 函数中。函数的元信息包括docstring、name、参数列表等等。

5、列表推导式

旧的列表 -->新的列表
语法:1.[表达式 for 变量 in 旧列表 if 条件]

res = [name for name in list if len(list)>4]

6、生成器
生成器实现方式一:通过推导式得到

generator = (i in range(100) if i%3 ==0) #generator即为生成器,特殊的迭代器
print(next(generator))  # 使用next()每次取一个符合条件的数

生成器的特性:生成器相当于一个容器,当把容器内的数据一次取出来了后容器内则没有数据了,即容器内数据为一次性

生成器实现方式二:利用函数的方式 yield

  • 当使用yield关键字后函数不再是函数,而是一个生成器
  • 当程序执行到yield的时候,程序就会停止,类似***input***
  • 生成器会记住你之前取到的元素的位置
def fn():
	print('程序被执行')
	i = 1
	while True:
		yield i
		i+=1

r = fn()
print(next(r))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020-10-10 的相关文章

随机推荐

  • Windows10电脑文件自动同步备份工具有哪些?

    对于工作中的重要数据人们一般都会有备份的习惯 但是如果都是人工手动复制粘贴 那效率会非常低下 Windows10中电脑文件自动同步备份工作有哪些 工具1 FileYee 推荐值 软件优势 可同百度网盘 移动硬盘实现自动同步备份 功能说明 F
  • 浏览器同源策略

    什么是同源 如果两个 URL 的协议 protocol 端口 port 域名 host 都相同的话 则这两个 URL 是同源的 下表给出了与 URL http store company com dir page html 的源进行对比的示
  • 11.python解答2020年蓝桥杯省赛python组 寻找2020

    11 python解答2020年蓝桥杯省赛python组 寻找2020 问题描述 小蓝有一个数字矩阵 里面只包含数字 0 和 2 小蓝很喜欢 2020 他想找到这个数字矩阵中有多少个 2020 小蓝只关注三种构成 2020 的方式 同一行里
  • 爬虫逆向实战(34)-某视综数据(MD5、AES)

    一 数据接口分析 主页地址 某视综 1 抓包 通过抓包可以发现数据接口是 rank waiting fans 2 判断是否有加密参数 请求参数是否加密 通过查看 载荷 模块可以发现有一个sign参数 请求头是否加密 无 响应是否加密 通过查
  • C语言,实现字符串排序

    实现字符串排序 include
  • leaftlet 点击事件与取消事件

    var layerNear var mapClick function map on click getRange var getRange function e e latlng地图上点击的点 layerNear L marker e l
  • js 数组遍历的几种方式

    js数组 表示的是有序的数据集合 是一种特殊的对象 对象是无序的数据结合 for循环 for in for each for of es6中数组实例的keys values entries map everyvery等函数 1 for循环
  • [Pyhon大数据分析] 二.PyEcharts绘制全国各地区、某省各城市地图及可视化分析

    思来想去 虽然很忙 但还是挤时间针对这次YQ写个Python大数据分析系列博客 包括网络爬虫 可视化分析 GIS地图显示 情感分析 舆情分析 主题挖掘 威胁情报溯源 知识图谱 预测预警及AI和NLP应用等 希望该系列线上远程教学对您有所帮助
  • win下C++通过Clion部署yolov5——libtorch+yolov5

    libtorch yolov5 一 环境配置 二 下载官网例子 三 测试 3 1 创建项目 3 2 cmakelist txt编写 3 3 运行测试 一 环境配置 需要配置libtorch OpenCV 此处参考博文 clion配置libt
  • 3D扫描技术概览

    3D扫描技术概览 复制链接 楼主 eseedo 发表于 2016 11 22 17 14 26 408 0 只看该作者 内容概要 1 使
  • 黑马程序员 JAVA学习笔记 ——— 多线程

    android培训 java培训 期待与您交流 首先 先介绍一下 熟悉的进程 按下 ctrl alt del就可以看到进程这一选项卡 进程是一个正在执行中的程序 每个进程执行都有一个执行顺序 该顺序是一个执行路径 或叫做一个控制单元 而今天
  • Scala基础语法之Trait详解

    Scala系列学习笔记 Scala概述与开发环境配置 Scala基础学习之运算符 Scala基础学习之for循环和while循环 一文掌握scala中的方法和函数 Scala基础 类和对象 访问修饰符和构造器 Scala的继承和抽象类 本章
  • database Derby initial

    surf the site http db apache org derby derby downloads html you ll get more but first is download the lastest Derby derb
  • Linux 网络通讯 : smbd 命令详解

    smbd命令用于Samba服务器程序 smbd为Samba服务器程序 可分享文件与打印机等网络资源供Windows相关的用户端程序存取 语法 1 smbd aDhoP d lt 排错层级 gt i lt 范围 gt l lt 记录文件 gt
  • FPGA(三)——基于FPGA的SPI通讯协议实现

    一 SPI通讯基本原理 1 SPI通讯介绍 SPI Serial Perripheral Interface 串行外围设备接口 是 Motorola 公司推出的一种同步串行接口技术 SPI 总线在物理上是通过接在外围设备微控制器 PICmi
  • Docker快速安装RabbitMQ服务

    Docker快速安装RabbitMQ服务 快速开始 bin bash 建议保存为start sh脚本执行 docker run d hostname my rabbit name some rabbit restart always p 1
  • Java 基础入门篇(一):Java 概述

    文章目录 一 Java 概述 二 Java 的产品 JDK 2 1 JDK 安装 2 2 Java与 Javac 介绍 2 3 Java 程序的开发步骤 三 Java 程序的执行原理 四 JDK 的组成 五 Java 的跨平台工作原理 一
  • Solidity transfer,call和send 的区别

    address transfer throws on failure forwards 2 300 gas stipend not adjustable safe against reentrancy should be used in m
  • SDF文件【简要说明】

    SDF Standard Delay Format 标准延时格式文件 常用延迟反标注 该文件包含了仿真用到的所有 IOPATH INTERCONNECT的延时 线延时 INTERCONNECT fsm block U27 Q fsm blo
  • 2020-10-10

    闭包和装饰器 1 高阶函数 接收函数作为参数是高阶函数 将函数作为返回值返回的函数就是高阶函数 2 匿名函数 lambda函数 无名函数 语法 lambda 参数列表 表达式 filter 函数 过滤列表 第一个参数 函数 第二个参数 序列