文章目录

  • 前言
  • 生成器
    • 为什么使用
    • 格式
  • 嵌套函数
  • 装饰器
    • 使用场景
    • 使用
  • 结语

前言

相信大家已经对函数有了一定的理解了吧,那么来看看生成器和装饰器吧

生成器

按道理来说,生成器应该是和迭代器一起讲的,但是由于这样那样的原因,就放在这里吧

生成器就是返回迭代器的函数,之前也说过什么是迭代器,就不多做赘述。

那么本质上来说,生成器其实就是一个函数

不过呢,生成器不是使用return,而是yield作为返回关键字。

在迭代器中,当你使用一次后,计算机会记住你已经用过一次了,下次使用的时候,会从你用过的值开始继续使用

而在生成器中,当调用函数时,遇到yield时,计算机会停止继续调用函数,记住当前使用的值,以便于下次调用时,使用下次的值

为什么使用

生成器一般用于占用内存较大,数据较多的情况

比如这个

for i in range(1000**100000):print(i)

数据比较大,当我们的机器遍历这个的时候,就会消耗较大的内存来去遍历,而如果有一种方法,可以让这个循环在我用的时候再遍历的话,就能节省许多内存

格式

def Xxx():代码yield x

把上面的例子做成一个简单的生成器

def Scq():for i in range(1000**100000):yield i
sc = Scq()
print(next(sc))
print(next(sc))
print(next(sc))
print(next(sc))

运行结果:

可以看到,当我们使用的时候,就会给我们相应的值,而如果我们直接遍历那个值的话,就会等待很久才会完成。

嵌套函数

见过这么多嵌套,看到嵌套函数应该没什么了吧

直接上代码

def Out():def Int():print("我是里面的")print("我是外面的")return Int()
Out()

运行结果:

这个平常并不会用到,但是这个只是给装饰器做铺垫的,让你们不至于看到装饰器的时候一脸懵逼

返回值是调用内部函数,不这样的话,内部函数就不会被使用

装饰器

我只能说,装饰器非常的666

装饰器是什么,就是给函数进行装饰的东西。

使用场景

我们公司这段代码已经上市,无法进行修改,但是客户又提了需求,需要我们添加功能,这时候怎么办?

这貌似无解,因为不能修改,你还让我添加功能,这怎么做到?

这还真能做到!这个方法就是装饰器,他可以在不动用代码的同时,对代码进行功能上的添加。

使用

# 为了好理解,就用中文表示了
def 外部函数(a):# 定义一个有参函数,参数是用来代指核心代码的def 内部函数():# 定义内部函数,使用形参调用核心代码a()# 在形参的上面就是添加在上面的,在下面就是添加在下面的print("在核心代码函数里面添加的")return 内部函数  # 返回内部函数的引用,而不是内部函数
@外部函数()
def 核心代码():print("我是核心代码")
核心代码()

关于内部函数的引用,在这里说一下

不加括号就是引用是一组内存地址,指向内部函数,而加括号,就是内部函数的调用,会使用内部函数,就像嵌套函数那样。

结语

先说这么多吧,不早了。

兴趣是最好的老师,坚持是不变的真理。
学习不要急躁,一步一个脚印,踏踏实实的往前走。
每天进步一点点,日积月累之下,你就会发现自己已经变得很厉害了。

我是布小禅,一枚自学萌新,跟着我每天进步一点点吧!

说了这么多暂时也就够了,那么就告辞吧

趁着课余时间学点Python(九)函数的进阶 生成器 装饰器的理解相关推荐

  1. 趁着课余时间学点Python(七)一篇文了解迭代器

    文章目录 前言 迭代器 迭代器的基本方法 小练习 结语 前言 好了,我们言归正传,啊,不对,我们继续道来.我们今天就说说迭代器! 这个词是不是看着比较高大上,感觉学不会?没事,今天我就带着你们征服他们 ...

  2. 趁着课余时间学点Python(八)函数的简单理解

    文章目录 前言 函数 无参函数 定义一个无参函数 调用这个无参函数 把我们的例子打出来 有参函数 定义和调用 实例 return的使用 例子 结语 前言 来了,他来了,函数篇! 学了函数才算是能推动p ...

  3. 趁着课余时间学点Python(十五)有趣的小模块

    一.Python模块与包 python中模块与包的含义 1. Python模块与包 模块是单个的py文件,包是包含多个py文件的文件夹 1.1 模块 模块是一个py文件 我们自己创建一个py文件就是一 ...

  4. 趁着课余时间学点Python(十)面向对象的理解(前奏)

    文章目录 前言 正文 面向过程 面向对象 类和对象 类 构造方法 对象 用Python代码展示洗衣服例子 面向过程洗衣服 面向对象洗衣服 结语 前言 说起来这一篇本打算早就写的,因博主沉迷小说耽搁了 ...

  5. 趁着课余时间学点Python(十二)面向对象的理解(结局)

    文章目录 前言 1. 私有化 1.1 属性私有化 1.2 方法私有化 2. 重写 3. 魔术方法 3.1 __init__方法 3.2 __str__方法 3.3 __del__方法 3.4 __ne ...

  6. 趁着课余时间学点Python(六)终止循环,阻断循环

    文章目录 前言 条件控制语句的补充 break continue return 结语 前言 如果我需要设置一个死循环,然后靠条件来终止,怎么办? 一个很简单的问题,但是我却没有说,这一篇本应该在分支控 ...

  7. 趁着课余时间学点Python(十四)文件操作

    文章目录 ☀️ 前言 ☀️

  8. 趁着课余时间学点Python(十三)异常处理

    文章目录 前言 一.异常/错误 1 编译时错误 2. 运行时错误 3. 逻辑型错误 二.异常处理 1. 捕获异常 1.1 try except finally语句 1.2 try except els ...

  9. 趁着课余时间学点Python(十六)多线程编程

    文章目录 ☀️ 前言 ☀️

最新文章

  1. c 服务器通信和文件传输,服务器、终端和文件传输方法
  2. 树莓派上搭建svn服务器
  3. 自定义日历控android,Android自定义日历Calender代码实现
  4. Git 工作区恢复暂存区操作总览
  5. (转)Java 调用 C++ (Java 调用 dll)
  6. springboot-web进阶(三)——统一异常处理
  7. Spring-core-ClassUtils类
  8. [数学建模]数学规划模型
  9. H13-531 华为HCIE云计算笔试题库整理
  10. ps,pr ,ae,dw等软件简短解析(含安装包)
  11. Adobe Illustrator【印前角线X2.0】脚本源码
  12. bad interpreter
  13. Activiti 会签/或签 设计思路
  14. STM32工程文件的建立以及Keil软件的基本设置和修改
  15. 【“玩物立志”scratch少儿编程】坦克动荡-“穿墙控制”和“子弹反弹”的实现-含完整代码
  16. The producer group has been created before
  17. Java-集合当中进行模糊查找
  18. 4、Javaweb_JavaScript DOM BOM 事件
  19. marvell yukon 88e8056驱动
  20. 微信小程序——(2)智慧商圈、微信支付快速积分到账小程序开发指引

热门文章

  1. fastadmin 的自定义搜索select框联动
  2. 在excel表格中,根据身份证号码就可以自动提取出生年月、性别、年龄。
  3. 华为手机最大屏是几英寸的_华为屏幕尺寸最大的手机,不是荣耀note10,而是这款发布仅三个月...
  4. 【服务器】多人共享服务器用户管理
  5. SAP学习资料地址收集
  6. 网线水晶头的接法标准
  7. IoC+AOP的简单实现
  8. 每日一首——濒湖脉学—七言歌诀—浮(阳)脉
  9. MacBook笔记本打不开github解决方案
  10. IBM存储兼容性检查