国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > python迭代器与生成器用途是什么

python迭代器与生成器用途是什么

Python 迭代器 生成器

头像

晓曦&sea

2020-07-18 13:07:475232浏览 · 0收藏 · 0评论

python迭代器的用途:用next函数获取下一个元素,只能向前取值,不会后退。python生成器的用途:动态提供数据,调用return生成一个StopIteration异常,通知next(it)函数不再提供数据。

一、迭代器

什么是迭代器

迭代器是指用iter(可迭代对象)函数返回的对象(实例)

迭代器可以用next(it)函数获取可迭代对象的数据

迭代器函数:

iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代对象

next(iterator)从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration异常

说明:

迭代器是访问可迭代对象的一种方式

迭代器只能向前取值,不会后退

用iter函数可以返回一个可迭代对象的迭代器

示例:

L = [2,3,4]或者 L = range(2,5)
it = iter(L)#使用iter函数使it绑定一个迭代器对象
next(it)#返回2
next(it)#返回3
next(it)#返回4
next(it)#触发StopIteration异常

迭代器的用途:

迭代器对象能用next函数获取下一个元素

示例:

#此示例示意用迭代器来访问可迭代对象
#用for语句访问可迭代对象L
L = [2,3,5,7]
for x in L:
print(x)
#用while语句访问可迭代对象L
it = iter(L)
while True:
try:
x = next(L)
print(x)
except StopIteration:
print('终止迭代,迭代器不能提供任何数据')
break

二、生成器Generator(python2.5之后)

什么是生成器:

生成器是能够动态提供数据的对象(不是一次性生成从而不占据内存空间),生成器对象也是可迭代对象(实例)

生成器有两种:

生成器函数

生成器表达式

生成器函数定义:

含有yield语句的函数是生成器函数,此函数被调用时将返回一个生成器对象

yield语句

语法:yield 表达式

说明:yield用于def函数中,目的是将此函数作为生成器函数使用

yield用来生成数据,供迭代器next(it)函数使用

实例:

#此示例示意生成器函数的定义及示意
def myyield():
'''此函数为生成器函数'''
yield 2#生成2
yield 3#生成3
yield 5#生成5
#用for语句访问myyield函数
for x in myyield():
print(x)
#用迭代器访问
gen = myyield()
it = iter(gen)
next(it)

生成器函数说明:

(1)生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象

(2)在生成器函数调用return时会生成一个StopIteration异常来通知next(it)函数不再能提供数据

示例:

#写一个myinteger(n)函数
def myinteger(n):
for x in range(n):
yield x
#for循环访问生成器
for x in myinteger(int(input('请输入整数:')))
print(x)
#用迭代器访问
it = iter(myinteger(10))
while True:
print(next(it))#到10时发生StopIteration错误

生成器表达式:

语法:(表达式 for 变量 in 可迭代对象 [if 真值表达式])

作用:用推导式的形式生成一个新的生成器

示例:

gen = (x**2 for x in range(1,4))#并没有生成数据
#gen = [x**2 for x in range(1,4)]#先在内存中生成数据
it = iter(gen)
next(it)#1
next(it)#4
next(it)#9
next(it)#StopIteration

列表推导式和生成表达式的区别:

生成器是动态生成的,现用现生成,列表表达式是静态的。

示例:

L = [1,2,3,4]
gen = (x for x in L)#gen绑定生成器
lst = [x for x in L]#lst绑定列表
L[1] = 222#改变原列表的第二个元素
for x in lst:
print(x)#1 2 3 4不变
for x in gen:
print(x)#1 222 3 4 ,第二个数是222

迭代工具函数:

迭代工具函数的作用是生成一个个性化的可迭代对象

函数:

zip( iter1 [,iter2,iter3,…])返回一个zip对象,此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定

enumerate(iterable[,start])生成带索引的枚举类型,返回迭代类型为索引-值队(index,value)对,默认索引从零开始,也可以使用start绑定

示例1:

numbers = [10086,10000,10010,95588]
names = ['中国移动','中国电信','中国联通']
for x in zip(numbers,names):
print(x)
#生成元组:
#(10086,'中国移动')
#(10000,'中国电信')
#(10010,'中国移动')
#for n,a in zip(numbers,names):
#print(n,a)
#d = dict(zip(names,number))生成字典
#for x in zip(range(10),numbers,names):
# print(x)x为三个对象组成的一个元组

示例2:

#实现机制
def myzip(iter1,iter2):
it1 = iter(iter1)
it2 = iter(iter2)
while True:
x = next(it1)
y = next(it2)
yield (x,y)
for x in myzip(range(100),range(50))
#示例3:
names = list('string')
for x in enumerate(names,start = 100):
print(x)#指定start会使索引从start开始
#(1000,'s') (101,'t')..返回元组的索引-值对,默认索引从0开始
#index = element = x
#print('索引是',index,'对应的元素是',element)

推荐课程:python基础语法全讲解视频(马哥教育2014版)

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

狗配人的大片| 美国大片又大又好看的PPT| 武松叼着潘金莲奶头的是谁扮演的 | 免费观看已满十八岁电视剧高清版 | 《交换做爰》在线观看| 美女和帅哥一起努力生产豆浆| 精品日本一区二区三区在线观看 | 《酒店激战》动漫1-5集免费观.. 《好好疼爱里面》日剧动漫 | 电动吸奶器| 不堪入耳的黄话怎么说| 美国禁忌6 结局| 《被按摩的人妻4》| 天使之城电影| 趴在床上翘屁股的好处有哪些| 妈妈的好朋友ID| 老公弄我一边干一边说粗话| 《暴力强伦轩》| 《好好疼爱里面》免费看| 《共享弟夫》动漫在线观看免费| 美女两个球球抖动抓球球视频| 打开网站免费进入| 日本在线观看| 老师我好爽再深一点老师好涨 | 扒开腿挺进肉蒂抽搐喷潮BL| 18岁的少女与狗高清电视剧| 《艳妻互换》完整版| 二人生猴子全程免费| 真爱禁区| 中字《喝醉的丈夫被结城送回家》| 深入交流漫画网免费看| 九九在线观看免费播放大全电视剧 | 《厨房激战5》完整版在线观看| 《别告诉我丈夫》电影| 日韩精品一区| 第1章饱满的乳峰喷奶水小说 | 私处按摩SPA养生精油| 成品网站1.1.719| 《黏糊糊的你》免费观看| 《特别酒店》免费观看| 《訾花交换做爰》| 《熟妇的荡欲》HD中字