一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“什么是闭包,生成器Generator该如何掌握”。
一、闭包Closure (扩展)
闭包的基本概念及应用技巧
简单说,闭包就是根据不同的配置信息得到不同的结果
再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
扩展:闭包closure
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。( 相当于给内部函数起别名)。
实现规则:
①定义内部函数
②外部函数必须有返回值 ,而且返回值必须为内部函数对象
闭包结构的定义,
示例
ch08-demo12-closure.py
闭包结构的调用
二、生成器Generator (扩展)
掌握生成器的两种创建方法/掌握yield关键字的使用
generator(生成器) 是 ES6 标准引入的新的数据类型,它的最大特点就是交出函数的执行权,即暂停执行。一个generator 看上去像是一个函数,但可以返回多次,与函数不同的是函数名前面多了一个星号* ,与yield 命令配合,可以实现暂停执行的功能。
扩展:生成器Generator
之前,我们在学习推导式的时候提到过。
回忆:使用( )不代表元组推导式,而是实现了一一个生成器,解析器在实时生成数据,数据不会驻留在内存中。
因此,其执行效率很高!
获取很多数据,数据生成规则
使用推导式快速创建一个生成器
示例
ch07 -demo14-generator.py
扩展:生成器yield关键字
●yield是一一个类似retum的关键字,只是这个函数返回的是个生成器
●当你调用这个函数的时候 ,函数内部的代码并不立即执行, 这个函数只是返回-一个生成器对象
●当你使用for进行迭代的时候 ,函数中的代码才会执行
使用yield创建一个生成器
示例
ch07-demo14-generator.py