迭代器认知

迭代器 (iterator): 如果一个对象同时有__iter__()和__next__()魔术方法的话,这个对象就可以称为是迭代器。

__iter__()的作用是可以让for循环遍历。而__next__()方法是让对象可以通过 next(实例对象) 的方式访问下一个元素,通常从序列第一个元素开始访问,直到所有的元素都被访问才结束。

列表List、元组Tuple、字典Dictionary、字符串String等数据类型虽然是可迭代的,但不是迭代器,因为他们都没有next( )方法,但是可用于创建迭代器。

迭代器不需要事先准备好整个迭代过程中的所有元素。仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

创建迭代器对象

list1 = ['python', 'java', 'c', 'php']

it = iter(list1)

print(it)

C:\Users\admin\AppData\Local\Programs\Python\Python37\python.exe C:/Users/admin/Desktop/AutoTest/Test/test/test_01/test_01.py

Process finished with exit code 0

调next()方法,输出迭代器下个值

list1 = ['python', 'java', 'c', 'php']

it = iter(list1)

print(next(it))

print(next(it))

print(next(it))

print(next(it))

print(next(it))

C:\Users\admin\AppData\Local\Programs\Python\Python37\python.exe C:/Users/admin/Desktop/AutoTest/Test/test/test_01/test_01.py

python

java

c

php

Traceback (most recent call last):

File "C:/Users/admin/Desktop/AutoTest/Test/test/test_01/test_01.py", line 12, in

print(next(it))

StopIteration

Process finished with exit code 1

迭代器对象可以使用for语句进行遍历

list1 = ['python', 'java', 'c', 'php']

it = iter(list1)

print(it)

for i in it:

print(i)

"C:\Program Files\Python35\python.exe" C:/Users/wangli/Desktop/AutoTest/Test/test/test_02.py

python

java

c

php

Process finished with exit code 0

认识生成器

生成器(generator),可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己的内置的__iter__方法),所以生成器就是可迭代对象,Python使用生成器,是指在需要的时候才产生结果,而不是立即产生结果。

a.生成器就是一个迭代器

b.调用一个生成器函数,返回的是一个迭代器对象

c.只有在调用时才产生相应数据,节省内存空间

d.生成器本质和其他的数据类型一样,都是实现了迭代器协议,只不过生成器附加了一个延迟计算省内存的好处

生成器函数

常规函数的定义,但是,使用yield语句而不是return语句返回结果。yield语句语句一次返回一个结果, 在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行

for i in range(0, 100):

yield i

print(test())

for i in test():

print(i)

"C:\Program Files\Python35\python.exe" C:/Users/wangli/Desktop/AutoTest/Test/test/test_02.py

0

1

2

3

4

5

……

99

Process finished with exit code 0

生成器表达式

类似于列表推导,生成器返回按需产生结果的一个对象,迭代调用,而不是一次构建一个结果列表,浪费内存

it = (i*2 for i in range(0, 20))

print(it)

for i in it:

print(i)

"C:\Program Files\Python35\python.exe" C:/Users/wangli/Desktop/AutoTest/Test/test/test_02.py

at 0x000001A03F40E258>

0

2

4

6

8

10

12

14

16

18

20

22

24

26

28

30

32

34

36

38

Process finished with exit code 0

python 迭代器 生成器_Python迭代器和生成器相关推荐

  1. python 迭代器 生成器_python 迭代器与生成器

    迭代器 迭代器就是iter(可迭代对象函数)返回的对象,说人话.......可迭代对象由一个个迭代器组成 可以用next()函数获取可迭代对象的数据 迭代是访问集合元素的一种方式(因为集合是无序的,所 ...

  2. python迭代器好处_python迭代器

    知识内容: 1.可迭代对象和迭代器 2.判断迭代器和可迭代对象的方法 3.迭代器的优缺点 一.可迭代对象和迭代器 1.可迭代对象 -> Iterable (1)可迭代协议 可以被迭代要满足要求的 ...

  3. python圆形生成器_python中的生成器

    什么是生成器? 生成器是一个包含了特殊关键字yield的函数.当被调用的时候,生成器函数返回一个生成器.可以使用send,throw,close方法让生成器和外界交互. 生成器也是迭代器,但是它不仅仅 ...

  4. 如何用python生成软件_python中的生成器函数是如何工作的?

    1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...

  5. python迭代器和生成器_Python迭代器与生成器

    一.如何实现可迭代对象和迭代器对象 1.由可迭代对象得到迭代器对象 例如l就是可迭代对象,iter(l)是迭代器对象 In [1]: l = [1,2,3,4] In [2]: l.__iter__ ...

  6. python迭代器使用_python迭代器的使用方法实例

    什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...

  7. python随机密码生成器_python实例--随机密码生成器

    最近在学习python,抽空看了看图形化模块wx,顺手写了个随机密码生成器,程序运行界面如下图:(注:在Ubuntu下运行结果) 源代码如下: import wx import string impo ...

  8. python迭代器使用_Python迭代器的用法

    我们在前面使用过语句"for x in列表对象",这就表示列表对象是可迭代的(Iterable).那么如何判断某个对象是否可迭代呢?答案是可以使用collections.Itera ...

  9. python iterable对象_Python迭代器Iterable判断方法解析

    迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象.例如:list.tuple.set.str.generator都是可迭代对象. 1.如何判断一个对象是否可迭代: # 如何判断 ...

最新文章

  1. LeetCode简单题之最长回文串
  2. phpStudy mysql升级至5.7
  3. Java8 - 自定义实现体会CompletableFuture的原理
  4. 11--MySQL数据查询应用(实战)(二)
  5. 【Android开发学习笔记之一】5大布局方式详解
  6. Bootstrap 模态框插件Modal 的方法
  7. ll命令报错-bash: ll: command not found
  8. JavaScript学习之函数的定义方式及调用
  9. 用vs2008编写和调试linux程序 ----VisualGDB 使用教程
  10. python dbf转excel,使用Python将.csv文件转换为.dbf?
  11. PHP网站接入QQ互联实现QQ登录获取用户信息功能,超级简单,三个文件就搞定,无需费力地去了解官方提供的一大堆Demo文件
  12. win10 如何设置绿色保护色?
  13. Java代码练习1 智能开关灯
  14. 教程 | 如何使用地图可视化疫情情况
  15. 道金斯科普三部曲_道金斯在神的物体上
  16. 使用防晒霜的十大误区
  17. 记录一个C++多线程的坑
  18. 金仓数据库KingbaseES的表空间
  19. PostgreSQL WHEN others THEN
  20. EE专业申请计算机工程,美国大学EE专业分支方向介绍及申请难度分析

热门文章

  1. 2021 年中国开源优秀人物揭晓
  2. 入侵微博服务器刷流量,开发者获刑 5 年;马化腾重回中国首富;支持 M1 芯片,VS Code 1.54 发布 | 极客头条...
  3. Firefox 新版本发布,Cookie 可真不好吃
  4. 雷军:小米开启“重新创业” ;Debian GNU/Linux诞生27周年|极客头条
  5. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  6. 播放内核的“瘦身”,你只需要这样做!
  7. 悲痛!临近年关,一位 IT 创业者自杀,曾卖房给员工发工资
  8. Java 14 有哪些新特性?
  9. 达摩院 2020 预测:量子霸权指日可待!
  10. 你的 App 在 iOS 13 上被卡死了吗?