首页 / PYTHON / python 迭代器、生成器
python 迭代器、生成器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 迭代器、生成器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2870字,纯文字阅读大概需要5分钟。
内容图文
1、迭代器 Iterator
【1】迭代器是访问可迭代对象的工具
【2】迭代器是指用iter(obj) 函数返回的对象(实例)。
【3】迭代器可以用next(it) 函数获取可迭代对象的数据
2、迭代器函数
【1】iter(iterable) 从可迭代对象中返回一个迭代器,iterable 必须是能提供一个迭代器的对象。即,用iter函数可以返回一个可迭代对象的迭代器
【2】next(iterator) 从迭代器iterator中获取下一个记录,如果无法获取下一条记录,则触发StopIteration异常。即,迭代器对象能用next函数获取下一个元素。
【3】迭代器只能向前取值,不会后退
In [7]: L = [2, 3, 5, 7] ...: for x in L: ...: print(x) ...: else: ...: print(‘循环结束‘) ...: print("---------------") ...: it = iter(L) # 从L中获取一个迭代器 ...: while True: ...: try: ...: x = next(it) ...: print(x) ...: except StopIteration: ...: print("循环结束") ...: break ...: 2 3 5 7 循环结束 --------------- 2 3 5 7 循环结束
In [9]: L = [2, 3, 5, 7] ...: it = iter(L) # 用L对象返回能访问L的迭代器, it绑定迭代器 ...: next(it) # 2 ...: next(it) # 3 ...: next(it) # 5 ...: next(it) # 7 ...: next(it) # StopIteration 通知(没有数据) --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-9-b65817a9e736> in <module> 5 next(it) # 5 6 next(it) # 7 ----> 7 next(it) # StopIteration 通知(没有数据) StopIteration: In [10]:
生成器 Generator
1、生成器
生成器是能够动态提供数据的对象,生成器对象也是可迭代对象(实例)
【1】生成器函数
【2】生成器表达式
2、生成器函数
【1】生成器函数定义
含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
① 生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
② 在生成器函数调用return 会触发一个StopIteration异常
【2】yiled 语句
yield 表达式
① yield 用于 def 语句定义的函数中,目的是将此函数作用生成器函数使用
② yield 用来生成数据,供迭代器的next(it) 函数使用
In [66]: def myyield(): ...: yield 2 ...: yield 3 ...: yield 5 ...: yield 7 ...: print("生成结束") ...: ...: ...: for x in myyield(): ...: print(x) ...: 2 3 5 7 生成结束
In [67]: def myyield(): ...: print("即将生成2") ...: yield 2 ...: print("即将生成3") ...: yield 3 ...: print("即将生成5") ...: yield 5 ...: print("即将生成7") ...: yield 7 ...: print("生成结束") ...: ...: gen = myyield() # gen 绑定一个生成器对象 ...: it = iter(gen) # 用生成器返回一个迭代器 ...: ...: # 从迭代器获取一个数据(此时生成器函数才开始执行) ...: print(next(it)) 即将生成2 2 In [68]: print(next(it)) 即将生成3 3 In [69]: print(next(it)) 即将生成5 5 In [70]: print(next(it)) 即将生成7 7 In [71]: print(next(it)) 生成结束 --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-71-4d0222393be1> in <module> ----> 1 print(next(it)) StopIteration: In [72]:
# 用生成器函数生成一定范围内的自然数 def myinteger(n): i = 0 # 自然数从0开始while i < n: yield i i += 1 for x in myinteger(3): print(x)
3、生成器表达式
(表达式 for 变量 in 可迭代对象 [if 真值表达式 ])
if 语句可以省略。
用推导式的形式创建一个新的生成器。
In [21]: gen = (x ** 2 for x in range(1, 5)) ...: it = iter(gen) ...: next(it) # 1 Out[21]: 1 In [22]: next(it) Out[22]: 4 In [23]: next(it) Out[23]: 9 In [24]: next(it) Out[24]: 16 In [25]: next(it) --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-25-bc1ab118995a> in <module> ----> 1 next(it) StopIteration:
原文:https://www.cnblogs.com/longyuu/p/14179274.html
内容总结
以上是互联网集市为您收集整理的python 迭代器、生成器全部内容,希望文章能够帮你解决python 迭代器、生成器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。