| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 【Python】再来聊一聊这道面试题:Python 2和Python 3中range()有何区别? -> 正文阅读 |
|
[Python知识库]【Python】再来聊一聊这道面试题:Python 2和Python 3中range()有何区别? |
一,经典面试题在python面试题中有一道经典的基础面试题:Python 2和Python 3中range()有何区别? 迭代是Python最强大的功能之一,平时的开发都会使用到迭代,就再来聊一聊Python这个强大的功能。 二,再来聊一聊迭代器与生成器平时自学的时候都会使用到迭代,但看到可迭代对象(iterable)、迭代器(iterator)和生成器(generator)这三个名词时,完全懵逼了,也没深入研究下。现在以自己的理解来详解,错误之处,大佬们帮忙指出。 (一)可迭代对象实现了__iter__()方法的对象就叫做可迭代对象。iter()方法的作用就是返回一个迭代器对象。
直观理解就是能用for循环进行迭代的对象就是可迭代对象。比如:字符串,列表,元祖,字典,集合等等,都是可迭代对象。
(二)迭代器可迭代对象是实现了__iter__()方法的对象,而迭代器(Iterator)则是实现了__iter__()和__next__()方法的对象,__iter__返回迭代器自身,__next__返回容器中的下一个值。这种可以被next()调用并不断返回下一个值的对象称为迭代器。迭代器一定是可迭代对象,反过来则不一定成立。用iter()函数可以把list、dict、str等Iterable变成Iterator.
输出结果
前三个next都获取到对应的值,但是再获取下一个值时,捕获异常,这是因为此时迭代器里面的内容已经空。如果想再次迭代,那就要调用 iter(…),传入之前构建迭代器的可迭代对象 下面是一个斐波那契数列迭代器:实现__iter__()和__next__()方法,其中__next__()抛出StopIteration异常,
执行结果:
(三)生成器与生成器表达式生成器生成器是通过一个或多个yield表达式构成的函数,生成器可以看作是一种特殊的迭代器,它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字,用生成器构建斐波那契数列。
执行结果 生成器表达式生成器表达式是列表推倒式的生成器版本,看起来像列表推导式,但是它返回的是一个生成器对象而不是列表对象。
(四)迭代器与生成器的区别生成器 (五)强大的内置迭代器方法zip()zip() 方法可以同时迭代多个序列,并各取一个元素,生成一个可返回元组的迭代器。此迭代器的长度以较短序列的长度保持一致,若想生成较长序列的长度,需要使用 itertools 模块的 zip_longest() 方法。
enumerate()enumerate() 方法接收一个序列类型参数,**生成一个可返回元组的迭代器,元组内容是下标及其对应的元素值。**它还可接收一个可选参数,指定下标的起始值,默认是0 。
map()map() 方法的参数是一个函数及一个或多个可迭代对象,**它会将可迭代对象的元素映射到该函数中,然后迭代地运行该函数,返回结果也是一个迭代器。**当存在多个可迭代对象参数时,迭代长度等于较短对象的长度。
filter()filter() 方法的参数是一个判断函数及一个可迭代对象,遍历可迭代对象执行判断函数,过滤下判断为True 的元素,与它相对,若想保留判断为 False 的元素,可使用 itertoole 模块的 filterfalse() 方法。
(六) itertools 模块除了前面所说的内置迭代器方法,还有itertools中的函数大多是返回各种迭代器对象,其中很多函数的作用我们平时要写很多代码才能达到,而在运行效率上反而更低,使用itertools中的函数可以轻松高效实现。 itertools.accumulate 累加
itertools.chain 连接多个迭代器。
itertools.permutations 指定数目的元素排列结果
itertools.combinations 指定数目的元素不重复的所有组合
itertools.combinations_with_replacement 允许重复元素的组合
itertools 中有很多方法,这里就不一一列举,可以参考 官方文档 参考https://blog.csdn.net/chinesehuazhou2/article/details/85643960 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/26 1:30:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |