首页 > 编程语言 >编程路-基础提升-第八周-04

编程路-基础提升-第八周-04

时间:2022-12-29 00:22:07浏览次数:37  
标签:__ 编程 函数 04 魔法 第八 next inner 迭代

一闭三器

一闭三器:闭包、迭代器、生成器、装饰器是函数中的高端用法,特别是装饰器会用的话,会大大节省编程的内存和效率。

  • 迭代器
  1. 如果直接在后面用魔法点类型的话,会查看该内容是否具备该类型的数据   用.__dir__()能调出该内容能使用的方法
  2. 迭代魔法方法 , 是否有可以被迭代的魔法方法    __iter__ 当对象有这个魔法方法的时候,就说明可以被循环
  3. 对循环内容在dir()可以查看能使用的方法,其中__next__ 获取里面的一个数据   对循环魔法后在使用_next\_魔法,可以发现输出一个数
  4. 对_next_魔法,连续输出都是一样的    但是整体打包到循环后在_next_魔法就依次输出
  5. 如果循环次数超过应有次数,会报错   while 异常处理 StopIteration
  6. for 如何判断一个数据是否可以被迭代  先判断有无_iter\_然后用__next\_进行迭代,for循环的底层逻辑是while循环
  • 生成器
  1. 生成器是一个特殊的迭代器
  2. yield 把一个函数变成生成器 返回数据,并且不杀死函数
  3. 如果对函数next,都是第一个数
    1. 用变量将函数内容取出,再next就可以分别取出数据
    2. 循环次数多了也会报错
    3. 将for改成while形式就可以不受循环次数的影响了
  4. 优点
    1. 当我们需要数据的时候才给我们 节省内存   
    2. 当需要使用一个很多的数据的时候
    3. 对很多数据同时操作的时候,可以不用先对数据全部取出占很多内存,他可以一个一个取出,一个一个操作
  5. 缺点  不可以被切片 不可以被取索引
  6. 另外对循环的函数取类型可以看到是generator生成器也可以使用next取值
  • 闭包
  1. 保证数据的安全  函数运行完成,公共数据不会死亡
  2. 常用形式
    1. def func():
    2. def inner():
    3. pass
    4. return inner
    5. 如果需要具体值,使用函数内容,返回函数加()
  3. 例如
    1. 正常对列表用函数取平均值
    2. 如果要保证数据不被外界删改
      1. 可以把变量放到大函数下
      2. 如果返回函数不加括号则数据是本地的代码
    3. 返回函数加括号,在取值时用大函数加括号就可以取到函数内的实际值
    4. 如果返回函数不加括号,就要对函数取变量,然后再输出中再取变量括号
    5. 如果对数据增加,可以在大函数下操作,这样对列表的改变不会影响公共数据
  • 装饰器
  1. 装饰函数 在不改变函数源码代码的同时为函数增加新的功能相当于在一个函数里再套一个函数,就行相当于闭包
  2. 例如 获取运算时间
    1. 如果对各种函数都取计算时间,就需要装饰器
    2. 首先创建装饰器,就是闭包形式
    3. 根据内容调整装饰器大框架
    4. 再对装饰器的内容进行细节调整
    5. 还要加上,函数对变量的复制,最后输出
    6. @func  
      1.  f = func(f)==@func  
      2. 等价于 f = func(f) == inner
      3. @func  放在要使用的定义函数前面即可
      4. 可以对多个定义函数操作
    7. 再调整下变量名称
  3. 对装试函数的修改
    1. 对输入的修改    对inner内的函数的输入变量的改变,影响最终输出结果
    2. 对输出的修改     通过inner函数中返回值的修改来实现
  4. 例子
    1. 原复合函数内容  用装试函数调整后
    2. 把要在原函数前执行的内容就放在inner中对变量定义前执行,也就是data前,同理,在其后执行的就放在data后
  5. 减少重复的功能代码  属于python里面的高级应用

 

标签:__,编程,函数,04,魔法,第八,next,inner,迭代
From: https://www.cnblogs.com/qipaxiaopao/p/17011561.html

相关文章

  • 编程路-基础提升-第八周-03
    模块与包模块与包其实就是借助外力和内力两种方式去更好,更方便的解决问题。了解模块系统模块和第三方模块系统的模块python自带的不需要下载直接导入就行第三方......
  • 编程路-基础提升-第八周-02
    异常处理与模块了解异常模型try:可能发⽣错误的代码except:如果出现异常执⾏的代码常规异常可以公式来判断异常  判断结束后,后面的代码也可以运行为了保证程......
  • Luogu4043 支线剧情 - 费用流 -
    题目链接:https://www.luogu.com.cn/problem/P4043题意:求图一个的路径并,使得所有边都包含且所有路径的权值之和最小,而且路径都是从1开始的题解:每条边都必须经过,容量设一......
  • 编程路-基础提升-第八周-01
    面向对象特性对象特性,更过是对继承属性的理解,理解到位了,在使用特性时,才能又方便又快捷。继承的概念封装,继承,多态   富二代继承财产类的继承 封装提高代码......
  • 1047. 删除字符串中的所有相邻重复项
    1047.删除字符串中的所有相邻重复项难度简单472收藏分享切换为英文接收动态反馈给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。......
  • 代码随想录算法训练营第一天LeetCode704,35,34,27
    代码随想录算法训练营第一天|LeetCode704,35,34,27LeetCode704二分查找题目链接:https://leetcode.cn/problems/binary-search///第一次做还不知道二分中的左闭右开和左闭......
  • 编程路-基础提升-第七周-04
    面向对象面对对象,实际上是继承某一类相同特征的事物,概念比较抽象,需要认真研究。理解面向对象面向对象是一致编程的思维模式特征是属性,编程中相当于变量  age=20......
  • 编程路-基础提升-第七周-03
    文件操作文件操作是使用Python中,跟现实连接的第一步,也是基础所在,要学会应用,才能慢慢有眼见为实的感觉。文件的操作作用文件读写文件名称文件的路径文本文件(data.t......
  • 编程路-基础提升-第七周-02
    高阶函数应用高级函数是对于函数应用更为简洁,更为高效的方法。递归的了解与应用特点函数内部自己调用自己必须要有出口递归可以用于多种情况下,一般需要和if判断......
  • ubuntu20.04下载及设置apt源
    下载地址1: ​​​​https://mirrors.aliyun.com/ubuntu-releases/​​下载地址2:​​https://cn.ubuntu.com/download​​vim/etc/apt/sources.listubuntu18.04(bionic)......