什么是Python的迭代器和生成器?(附代码)
迭代器:一次一个!

Python数据科学:
https://courses.analyticsvidhya.com/courses/introduction-to-data-science?utm_source=blog&utm_medium=python-iterators-and-generators
这是我们要介绍的内容:
什么是可迭代对象?
什么是Python迭代器?
在Python中创建一个迭代器
熟悉Python中的生成器
实现Python中的生成器表达式
为什么你应该使用迭代器?
什么是可迭代对象?
# iterablessample = ['data science', 'business analytics', 'machine learning']for i in sample:print(i)

什么是Python迭代器?
sample = ['data science', 'business analytics', 'machine learning']# generating an iteratorit = sample.__iter__()print(it)# iterables do not have __next__() methodsample.__next__()

sample = ['data science', 'business analytics', 'machine learning']# generating an iteratorit = sample.__iter__()print(it.__next__())print(it.__next__())print(it.__next__())

sample = ['data science', 'business analytics', 'machine learning']it = sample.__iter__()itit = it.__iter__()print(type(itit))print(itit.__next__())print(itit.__next__())print(itit.__next__())

sample = ['statistics', 'linear algebra', 'probability']# iteratorit = iter(sample)# next valuesprint(next(it))print(next(it))print(next(it))

print(next(it)) 
sample = ['statistics', 'linear algebra', 'probability']it = iter(sample)while True:# this will execute till an error is raisedtry:val = next(it)# when we reach end of the list, error is raised and we break out of the loopexcept StopIteration:breakprint(val)

在Python中创建一个迭代器
class Sequence():def __init__(self):self.num = 2def __iter__(self):return selfdef __next__(self):val = self.numself.num += 2return val
__init __()方法是类构造函数,调用类时会首先执行该函数。它用于分配程序执行期间类最初所需的任何值。我在这里设置num变量的初始值为2;
iter()和next()方法使这个类变成了迭代器;
iter()方法返回迭代器对象并对迭代进行初始化。由于类对象本身是迭代器,因此它返回自身;
next()方法从迭代器中返回当前值,并改变下一次调用的状态。我们将num变量的值加2,因为我们只打印偶数。
it = Sequence()print(next(it))print(next(it))print(next(it))print(next(it))print(next(it))

class Sequence():def __init__(self):self.num = 2def __iter__(self):return selfdef __next__(self):val = self.numif val>=10:raise StopIterationself.num += 2return val
it = Sequence()for i in it:print(i)

熟悉Python中的生成器
# fibonacci sequence using a generatordef fib():prev, curr = 0, 1# infinite loopwhile prev<5:value = prev# Calculate the next number in the sequence. Using Tuple unpacking.prev, curr = curr, prev + curr# yield the valueyield value
# generator objectgen=fib()print(gen)# valuesprint(next(gen))print(next(gen))print(next(gen))print(next(gen))print(next(gen))

print(next(gen))
实现Python中的生成器表达式
squared_gen = (x*x for x in range(2,5))print(squared_gen)

for i in squared_gen:print(i)

为什么你应该使用迭代器?
import sys# list comprehensionmylist = [i for i in range(10000000)]print('Size of list in memory',sys.getsizeof(mylist))# generator expressionmygen = (i for i in range(10000000))print('Size of generator in memory',sys.getsizeof(mygen)

file = "Greetings.txt"# generator expressionlines = (line for line in open(file))print(lines)# print linesprint(next(lines))print(next(lines))print(next(lines))

import pandas as pd# pandas dataframedf = pd.read_csv('./Black Friday.csv', chunksize=10)# print first chunk of datanext(df)

# print second chunk of datanext(df)

结语
本文转自:数据派THU ;获授权;
END
合作请加QQ:365242293
数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 中法友谊蕴山水 7904743
- 2 微信表情包戒烟再度翻红 7809371
- 3 劲酒如何成了年轻女性的神仙水 7714188
- 4 盘点2025大国重器新突破 7616891
- 5 为啥今年流感如此厉害 7523315
- 6 美国称将调整与中国经济关系 7426786
- 7 你以为的进口尖货 其实早已国产了 7330414
- 8 杭州野生动物园黑熊突然袭击饲养员 7238740
- 9 美军承认:击落美军战机 7137342
- 10 周末去哪玩?雪场“不打烊” 7047980







数据分析
