这一章节我们来聊聊手动迭代:iter和next
1.next
我们上一节已经提到这个next,我们在这里再扩充一下,出了__next__()方法之外,我们还可以使用内建函数next(file)来实现
下面是两组功能相同的代码清单:
>>> handler=open('output_file.txt')
>>> next(handler)
'aaaaa\n'
>>> next(handler)
'bbbbb\n'
>>> next(handler)
'ccccc\n'
>>> next(handler)
'ddddd\n'
>>> next(handler)
'fffff'
>>> next(handler)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
next(handler)
StopIteration
>>> handler.close ()
>>> handler=open('output_file.txt')
>>> handler.__next__ ()
'aaaaa\n'
>>> handler.__next__ ()
'bbbbb\n'
>>> handler.__next__ ()
'ccccc\n'
>>> handler.__next__ ()
'ddddd\n'
>>> handler.__next__ ()
'fffff'
>>> handler.__next__ ()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
handler.__next__ ()
StopIteration
>>> handler.close ()
>>>
两组代码都实现了同样的功能:就是读取文件的下一行,而且两个方法的结束都是以抓StopIteration异常结束
2.iter
iter是一个迭代器我们先举一个例子:
>>> aList=[1,2,3]
>>> Iter=iter(aList)
>>> Iter.__next__()
1
>>> next(Iter)
2
上面的执行步骤是:
1)建立一个列表
2)通过iter()方法返回一个迭代器
3)调用迭代器的__next__方法,或者使用内建函数next(),得到内容的下一个
现在问题来了,为什么上面文件迭代器不用iter呢?
我们接着上面的代码,得到下面的例子:
>>> aList=[1,2,3]
>>> Iter=iter(aList)
>>> Iter.__next__()
1
>>> next(Iter)
2
>>> Iter is aList
False
>>> handler=open('output_file.txt')
>>> iter(handler) is handler
True
>>>
通过is测试我们看出,列表只有在调用iter()函数之后才返回一个迭代器,而对于文件,open打开之后本身返回的就是一个迭代器
因此,对于文件的返回来说,它返回的是文件迭代器
关于迭代一个列表,我们总结了下面的两种方法:
>>> aList=[1,2,3]
>>> for item in aList:
print(item)
1
2
3
>>> Iter=iter(aList)
>>> while True:
try:
a=next(Iter)
except StopIteration:
break
print(a**2)
1
4
9
>>>
3.其他内建类型的迭代器
1)range
>>> a=range(5)
>>> Iter=iter(a)
>>> while True:
try:
b=next(Iter)
except StopIteration:
break
print(b)
0
1
2
3
4
>>>
>>> for x in range(5):
print(x)
0
1
2
3
4
>>>
虽然上面举出两种方法,但是我们还是推荐使用下面一种,更方便更简洁
2)字典
>>> Iter=iter(aDict)
>>> while True:
try:
b=next(Iter)
except StopIteration:
break
print(b,aDict[b])
c 3
b 2
a 1
>>>
>>> for key in aDict.keys ():
print(key,aDict[key])
c 3
b 2
a 1
>>> aDict={'a':1,'b':2,'c':3}
>>> for key in aDict:
print(key,aDict[key])
c 3
b 2
a 1
通过上面方法的对比,我们推荐使用最后一种,简洁清晰
总结:这一章节主要讲述了iter迭代器与next的使用,以及举例说明它们在列表、文件、字典等内建类型的应用。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
`go-iter`库可能提供了对并发友好的迭代器实现,允许在多个goroutine之间安全地共享和迭代数据。 7. **实际应用**:`go-iter`库可以广泛应用于数据处理、算法实现、数据解析等领域。例如,它可以用于高效地遍历大型...
在Python中,任何实现了`__iter__()`和`__next__()`方法的类都可以成为迭代器。 - `iter()`函数用于将一个可迭代对象(如列表、元组)转化为迭代器。一旦迭代器耗尽所有元素,它会抛出`StopIteration`异常。 2. **...
在本文中,我们将深入探讨迭代器模式的概念,并通过Python和C++两种编程语言展示其实现。 首先,理解迭代器模式的核心概念。迭代器允许用户遍历一个聚合对象的所有元素,而不需要了解其内部结构。它定义了访问聚合...
Python基础(补充):python三大器之迭代器 迭代器是 Python 中的一种重要数据类型,它们是可重复执行的对象,用于实现循环操作。迭代器的概念来自于数学中的迭代法,即重复执行一系列运算步骤,从前面的量依次求出...
在3DEC中,使用`solve`命令开始静态或动态分析,并通过`iter`和`end solve`来控制迭代次数。 6. **后处理**:分析完成后,通常需要查看结果。3DEC提供了`plot`和`display`命令来可视化位移、应力、应变等结果。`...
- **迭代器**:实现了`__iter__()`和`__next__()`方法的对象。 - **生成器**:通过`yield`关键字定义,可以暂停和恢复执行。 #### 十九、Python标准库概览 - **操作系统接口**:提供了与操作系统交互的功能。 - **...
迭代器和生成器是Python编程中的重要概念,特别是在处理大量数据或进行高效内存管理时,它们的优势尤为明显。本文将详细讲解这两个概念及其在Python语言中的应用。 **迭代器** 迭代器是Python中访问集合元素的一种...
- **迭代器**:支持迭代的对象,如`iter()`和`next()`。 - **生成器**:通过`yield`关键字创建,延迟计算且可迭代。 - **装饰器**:用于修改或增强函数行为的函数。 - **闭包**:内层函数记住其外部的局部变量。...
- `__iter__`和`__next__`:使对象可迭代。 9. **模块和包**: - `import`语句导入模块,`from...import`导入特定部分。 - `__init__.py`文件标识包结构。 - `sys`模块用于系统交互,如获取命令行参数。 - `os...
- `iter_swap`:交换两个迭代器所指向的元素。 - `lexicographical_compare`:比较两个范围的字典序。 - `lexicographical_compare_3way`:用三路比较法比较两个范围的字典序。 - `lower_bound`:在有序容器中...
文档不仅覆盖了内置函数、类型等基础知识,还包含了异常处理、字符串操作等多个方面,是学习和掌握Python 2.7的重要资源。 #### 二、内置函数 文档第二章详细介绍了Python 2.7中的内置函数。这些函数包括但不限于...
根据给定的文件信息,以下是对Python参考卡片中提及...以上内容涵盖了Python基础数据类型和常见操作,对于初学者和有经验的开发者来说,都是重要的参考材料。理解并熟练掌握这些知识点,有助于更高效地编写Python代码。
迭代器遵循迭代器协议,即必须实现`__iter__()`和`__next__()`方法。 **迭代器的创建:** - 通过实现`__iter__()`和`__next__()`方法,可以自定义迭代器类。 - 或者使用生成器函数,通过`yield`关键字自动创建迭代...
- 迭代器:实现了`__iter__`和`__next__`方法的对象。 - 生成器:一种特殊的迭代器,用于生成一系列值。 以上内容覆盖了《Python基础教程》的部分章节知识点,这些基础和进阶内容对于初学者来说是非常重要的,...
在Python编程语言中,迭代和迭代器是两个非常重要的概念,它们在处理数据集合时扮演着核心角色。本文将深入探讨这两个概念,并通过实例来帮助理解。 首先,我们需要理解什么是可迭代对象。在Python中,可迭代对象是...
"array-iter-next-crnt"就是一个这样的库,专门针对数组操作,特别是迭代和跟踪当前项。这个库的核心功能是实现了一个迭代器,可以逐个获取数组中的元素,并在迭代过程中保持对当前项的记录。 在JavaScript中,`...
* --rand-spec-iter=N:设置数字生成的迭代次数,默认值为12 * --rand-spec-pct=N:设置special随机模式中待处理值的百分比,默认值为1 * --rand-spec-res=N:设置special随机模式中指定值的比例,默认值为75 * --...
在Python中,一个对象如果可以被迭代,那么它必须实现了`__iter__`和`__next__`方法,或者它是一个可迭代的容器,如列表、元组、字符串、字典等。`__iter__`方法返回一个迭代器对象,而`__next__`方法则返回容器中的...
- **迭代器**:实现了`__iter__`和`__next__`方法的对象,可以用于遍历数据。 - **生成器**:使用`yield`关键字定义的函数,它可以动态生成结果,节省内存。 9. **装饰器**: - 装饰器允许我们修改或增强函数、...
- 迭代器:实现了`__iter__`和`__next__`方法的类,允许按需生成值。 - 生成器:使用`yield`关键字的函数,创建了一个可迭代的生成器对象,节省内存。 - 生成器表达式:类似于列表推导,但返回生成器,如 `(x**2 ...