我是靠谱客的博主 爱听歌冷风,最近开发中收集的这篇文章主要介绍Python学习(十二)——生成器和迭代器生成器迭代器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

生成器

生成器就是一种自定义的迭代器,本质就是迭代器 。即生成器是迭代器中的一种。
next():每次只获取一个数据。
next()的两种用法:

g = (x for x in range(1, 6))
print(next(g))	# 1
print(next(g))	# 2
print(g.__next__())	 # 3
print(g.__next__())	 # 4
# 结果:1
#		2
#		3
#		4
r = (x for x in range(1,6))
for i in r:
    print(i)
# 结果:1
#		2
#		3
#		4
#		5

for循环的本质就是调用next()

# 创建生成器方法一:
(x for x in range(1,11))

# 创建生成器方法二:yield关键字实现
# yield相当于挂起,存档的意思
def f():
    print("hello world")
    yield 1

g = f()
print(next(g))
# 结果:hello world
#		1
def a():
    print("f1")
    yield 1
    print("f2")
    yield 2
 
g = a()
print(next(g))	# f1  1
print(next(g))	# f2  2
# 结果: f1
#		1
#		f2
#		2
def a():
    print("f1")
    yield 1
    print("f2")
    yield 2
for i in a():
    print(i)
# 结果: f1
#		1
#		f2
#		2

可迭代对象的含义:

  1. 从现象来看,只要是可以for循环的都是可迭代对象。
  2. 从本质来看,是内置有iter方法的是可迭代对象(对象拥有iter方法)。
li = [2, 4, 6]
print(li.__iter__())
tu = (1, 2, 3)
print(tu.__iter__())
di = {'name': 'Jim'}
print(di.__iter__())
# 结果:<list_iterator object at 0x000001C13046F610>
#		<tuple_iterator object at 0x000001C13046F610>
#		<dict_keyiterator object at 0x000001C13020C810>

迭代器

iterator:迭代器
iterable:可迭代对象

li = [2, 4, 6]
a = iter(li)
print(a)  
#结果:<list_iterator object at 0x000002609AA69FA0>

迭代器有next()方法;有iter()方法

li = [2, 4, 6]
a = iter(li)
print(next(a))
print(next(a))
print(next(a))
# 结果:2
#		4
#		6

for循环的本质:

  • 调用可迭代对象的iter方法返回一个迭代器
  • 不断地调用迭代器的next()方法
  • 处理异常
li = [1, 2, 3]
for i in li:
    print(i)
li.__iter__()
# 结果:1
#		2
#		3
a = iter([1,2,3])
while True:
    try:
        print(next(a))
    except StopIteration:
        break
# 结果:1
#		2
#		3

迭代器的优点:
为序列类型和非序列类型提供一种统一的迭代取值方式。
可以只在需要的时候才去调用next()来计算出一个值。就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流。而对于其他容器的类型,比如列表,就需要把所有的元素都存放在内存中,受内存大小的限制,可以存放的值得个数是有限的。

最后

以上就是爱听歌冷风为你收集整理的Python学习(十二)——生成器和迭代器生成器迭代器的全部内容,希望文章能够帮你解决Python学习(十二)——生成器和迭代器生成器迭代器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部