`
李灵晖-raylee
  • 浏览: 138579 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

零基础学python-13.2 手动迭代:iter和next

 
阅读更多

这一章节我们来聊聊手动迭代: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-go-iter:提供迭代任意数据结构的原语

    `go-iter`库可能提供了对并发友好的迭代器实现,允许在多个goroutine之间安全地共享和迭代数据。 7. **实际应用**:`go-iter`库可以广泛应用于数据处理、算法实现、数据解析等领域。例如,它可以用于高效地遍历大型...

    05-python-迭代器-生成器-with语句和上下文管理器-修饰符

    在Python中,任何实现了`__iter__()`和`__next__()`方法的类都可以成为迭代器。 - `iter()`函数用于将一个可迭代对象(如列表、元组)转化为迭代器。一旦迭代器耗尽所有元素,它会抛出`StopIteration`异常。 2. **...

    设计模式专题之(二十三)迭代器模式---设计模式迭代器模式示例代码(python--c++)

    在本文中,我们将深入探讨迭代器模式的概念,并通过Python和C++两种编程语言展示其实现。 首先,理解迭代器模式的核心概念。迭代器允许用户遍历一个聚合对象的所有元素,而不需要了解其内部结构。它定义了访问聚合...

    python基础(补充):python三大器之迭代器.pdf

    Python基础(补充):python三大器之迭代器 迭代器是 Python 中的一种重要数据类型,它们是可重复执行的对象,用于实现循环操作。迭代器的概念来自于数学中的迭代法,即重复执行一系列运算步骤,从前面的量依次求出...

    5 命令流_2021-12-0300:00:00_

    在3DEC中,使用`solve`命令开始静态或动态分析,并通过`iter`和`end solve`来控制迭代次数。 6. **后处理**:分析完成后,通常需要查看结果。3DEC提供了`plot`和`display`命令来可视化位移、应力、应变等结果。`...

    Python34中文手册(官方文档).docx

    - **迭代器**:实现了`__iter__()`和`__next__()`方法的对象。 - **生成器**:通过`yield`关键字定义,可以暂停和恢复执行。 #### 十九、Python标准库概览 - **操作系统接口**:提供了与操作系统交互的功能。 - **...

    Python语言基础:迭代器和生成器.pptx

    迭代器和生成器是Python编程中的重要概念,特别是在处理大量数据或进行高效内存管理时,它们的优势尤为明显。本文将详细讲解这两个概念及其在Python语言中的应用。 **迭代器** 迭代器是Python中访问集合元素的一种...

    最全的python学习路线图

    - **迭代器**:支持迭代的对象,如`iter()`和`next()`。 - **生成器**:通过`yield`关键字创建,延迟计算且可迭代。 - **装饰器**:用于修改或增强函数行为的函数。 - **闭包**:内层函数记住其外部的局部变量。...

    python-cheat-sheet:良好实践,准则,设计模式,内置数据类型,笨拙的方法,修饰符和开发的数据结构的集合

    - `__iter__`和`__next__`:使对象可迭代。 9. **模块和包**: - `import`语句导入模块,`from...import`导入特定部分。 - `__init__.py`文件标识包结构。 - `sys`模块用于系统交互,如获取命令行参数。 - `os...

    STL用户手册

    - `iter_swap`:交换两个迭代器所指向的元素。 - `lexicographical_compare`:比较两个范围的字典序。 - `lexicographical_compare_3way`:用三路比较法比较两个范围的字典序。 - `lower_bound`:在有序容器中...

    python2.7 库参考 英文版

    文档不仅覆盖了内置函数、类型等基础知识,还包含了异常处理、字符串操作等多个方面,是学习和掌握Python 2.7的重要资源。 #### 二、内置函数 文档第二章详细介绍了Python 2.7中的内置函数。这些函数包括但不限于...

    python_reference_card

    根据给定的文件信息,以下是对Python参考卡片中提及...以上内容涵盖了Python基础数据类型和常见操作,对于初学者和有经验的开发者来说,都是重要的参考材料。理解并熟练掌握这些知识点,有助于更高效地编写Python代码。

    Python:Python高级特性:装饰器与迭代器

    迭代器遵循迭代器协议,即必须实现`__iter__()`和`__next__()`方法。 **迭代器的创建:** - 通过实现`__iter__()`和`__next__()`方法,可以自定义迭代器类。 - 或者使用生成器函数,通过`yield`关键字自动创建迭代...

    python基础教程-学习笔记.pdf

    - 迭代器:实现了`__iter__`和`__next__`方法的对象。 - 生成器:一种特殊的迭代器,用于生成一系列值。 以上内容覆盖了《Python基础教程》的部分章节知识点,这些基础和进阶内容对于初学者来说是非常重要的,...

    详解Python迭代和迭代器

    在Python编程语言中,迭代和迭代器是两个非常重要的概念,它们在处理数据集合时扮演着核心角色。本文将深入探讨这两个概念,并通过实例来帮助理解。 首先,我们需要理解什么是可迭代对象。在Python中,可迭代对象是...

    前端开源库-array-iter-next-crnt

    "array-iter-next-crnt"就是一个这样的库,专门针对数组操作,特别是迭代和跟踪当前项。这个库的核心功能是实现了一个迭代器,可以逐个获取数组中的元素,并在迭代过程中保持对当前项的记录。 在JavaScript中,`...

    sysbench使用方法

    * --rand-spec-iter=N:设置数字生成的迭代次数,默认值为12 * --rand-spec-pct=N:设置special随机模式中待处理值的百分比,默认值为1 * --rand-spec-res=N:设置special随机模式中指定值的比例,默认值为75 * --...

    python3实用编程技巧进阶(1套课程)\第3章-6 PYTHON迭代多个对象 Python课程 教程 进阶 0基础学习

    在Python中,一个对象如果可以被迭代,那么它必须实现了`__iter__`和`__next__`方法,或者它是一个可迭代的容器,如列表、元组、字符串、字典等。`__iter__`方法返回一个迭代器对象,而`__next__`方法则返回容器中的...

    python-Day07.rar

    - **迭代器**:实现了`__iter__`和`__next__`方法的对象,可以用于遍历数据。 - **生成器**:使用`yield`关键字定义的函数,它可以动态生成结果,节省内存。 9. **装饰器**: - 装饰器允许我们修改或增强函数、...

    记录学习:流畅的Python 一书的过程,并整理成代码和笔记.zip

    - 迭代器:实现了`__iter__`和`__next__`方法的类,允许按需生成值。 - 生成器:使用`yield`关键字的函数,创建了一个可迭代的生成器对象,节省内存。 - 生成器表达式:类似于列表推导,但返回生成器,如 `(x**2 ...

Global site tag (gtag.js) - Google Analytics