| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> python高级编程2----生成器及闭包 -> 正文阅读 |
|
[开发测试]python高级编程2----生成器及闭包 |
1.列表推导式列表推导式:可以快速生成一个列表。 用法: 变量 = [ 推到语句 ] ?例 1.? 得到1~100的列表
例 2. 得到1~100 2的倍数的列表
注意:到需要生成大量元素时,空间浪费就会常大。 2.列表生成器列表生成器与列表推导式相比 就是把 [ ]换成(),切返回的是一个对象。当需要拿出元素时需用 借助next(对象)来拿出元素。 next ----相当于指针 ,拿出一个之后不会回退(意思是每个元素只能拿一次),直到超出元素个数后抛出错误。 ? 例 1. 1~5的列表生成 ? ? ? ?
通过遍历的方式也可以拿出元素
? 例 2. 将函数转换为推导式。
但是这样元素会一直存储在列表中,也会照成空间的大量浪费。因此需要用到yield关键字,返回的是一个生成器,减少了空间的浪费。 yield关键字与return 相似都是返回值。但又有所不同,yield 返回的是一个对象(生成器),return 返回的是一个值。因此一般在取值的时候会用 next() 或是 遍历 来获取元素。 ? ? ? ? 例 1.斐波那契数
? yield ----不仅返回的是一个对象(生成器),记住上次的位置执行从上次结束的位置开始。
?增加以次 next关键字,取值之后。 ?2.迭代器迭代(Itreable)是访问容器元素的一种方式 。可迭代的对象有哪些?------可以用for in 循环进行遍历的对象基本都可以迭代除此之外还可以使用isinstance()判断对象是否可迭代。在使用isinstance()时需要导入collections.abc库中的Iterable. isinstance(对象,Iterable)---入过对象可迭代 返回True? ?例 1.?
凡是能被next()调用,并返回值得才是迭代器,但前提是对象必须可迭代。可迭代的不一定是迭代器,迭代器一定可迭代 判断是不是迭代器 isinstance(对象,Iterator),如果是则返回True ,Iterator也是colletcions.abc库中的也需要导入。 例,
迭代器是可以转化为迭代器的,需要用到一个全局函数,iter().用法? iter(可迭代的对象)? 返回的是一个对象? ,一般需要用变量来接受这个对象
总结:凡是能用for循环遍历的对象是可迭代的,但是可迭代的并不一定是迭代器,但是迭代器一定是可迭代的,可迭代的对象可以通过iter(可迭代对象)转换为迭代器。迭代器还有一个重要特征就是能别next调用并返回值。 3.闭包闭包是一种现象,弱数据语言特有的特征,闭包在python用的并不是很多,在js中用的频繁,但还是须要有所了解的。 闭包的概念:闭包其实就是函数中包裹的函数的现象就是闭包(函数中的变量只能作用于函数中(局部变量)) 例.
?函数调用的本质是压栈的过程,res = outer() 调用了outer()函数的时候就是一个压栈的过程,当执 行完print(res)之后就会进行弹栈的操作,函数的局部变量就会被垃圾回收机制回收,但是inner()函数里 面要使用变量a,如果按照正常流程进行回收了,那么就会报错,但是并没有报错,那也就说明变量a没 有被回收 结论:闭包让外围的函数常驻内存,导致拦击不能及时释放,但是让局部变量变成了全局变量,所 以说尽量不要使用闭包,在js中闭包使用的比较广泛,而在python中比较少,会用在装饰器中 4.装饰器装饰器是闭包的应用的一种,装饰器可以在不改变原有代码的基础上增加新的功能。? 用法: 通过 @函数名? ? ?用在需要增加功能的函数前面 例. 无参
?此例子是一个简写例子,意表现装饰器的用途。 注意在用装饰器时,闭包函数有一个参数是必须要有的,不管被装饰的函数是否有参数都要写上@outer加在被装饰的函数的前面就相当于将函数吃掉了,outer(fn)-----这个fn就相当于是被装饰的函数体。 例.当被装饰的函数有参数时
?当被装饰的函数体有参数时,在闭包中的函数也应该跟上相同个数的形参(形参的并不一定需要一模一样,个数相同就行) |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 6:34:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |