python 迭代器 生成器 解析

迭代器
什么是迭代器
迭代器是访问可迭代对象的工具
迭代器是指iter(obj)函数返回的对象(实例)
迭代器可以用next(it)函数获取可迭代对象的数据
迭代器函数iter和next
iter(iterable)从可迭代对象中返回一个迭代器
Iterable,必须能提供一个可迭代对象
next(Iterator)从迭代器中获取下一个记录,如果无法获取下一条记录则触发stopiterator异常
说明
1.迭代器只能往前取值,不会后退
2.用iter函数可以返回一个可迭代对象的迭代器
实例

l=[1,2,3,45,6,7,9]
i=iter(l)
next(i)
1
next(i)
2
next(i)
3
next(i)
45
next(i)
6
next(i)
7
next(i)
9
next(i)
Traceback (most recent call last):
File “”, line 1, in
StopIteration

迭代器的用途
用迭代器可以依次访问可迭代对象的数据
l=[1,2,34,5]
for i in l :
print(x)

l=[1,2,34,5]
it=iter(l)
while True:
try:

    x=next(it)
    print(x)
except StopIteration:
    break

1
2
34
5
s={‘唐僧’,’悟空’,’八戒’,’沙僧’}
it=iter(s)
while True:
try:
print(next(it))
except StopIteration:
break

生成器
什么是生成器
生成器是能够动态提供数据的对象,生成器对象也是可迭代对象
生成器有两种
1生成器函数
2生成器表达式
生成器函数的定义
含有yield语句的函数是生成器,此函数被调用将返回一个生成器对象
yield 翻译为产生(或生成)
yield 语句
语法 yield

说明:
yield 用于def 函数中目的是将此函数作用生成器函数使用yield
用来生成数据,供迭代器和next(it)函数使用
把生成器变成迭代器
def gen():
for i in range(20):
print(‘qqqq’)
yield i

gen1=gen()

it=iter(gen1)

while True:
try:
print(next(it))
except StopIteration:
break

def gen():
for i in range(20):
print(‘qqqq’,i)
yield gen()
for i in gen():
print(i)
qqqq 0

qqqq 1

qqqq 2

qqqq 3

qqqq 4

qqqq 5

qqqq 6

qqqq 7

qqqq 8

qqqq 9

qqqq 10

qqqq 11

qqqq 12

qqqq 13

qqqq 14

qqqq 15

qqqq 16

qqqq 17

qqqq 18

qqqq 19

0
1
2
3
4
5
6
7
8
9
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
生成器函数的说明
生成器函数的调用将返回一个生成器对象
生成器对象是一个可迭代对象
通常用来动态生成数据
生成器函数调用return 会触发一个StopIteration异常
def myrange(start,stop,step=1):
while start

def pingfangjianyi(n):

i=1

while i

s=0

s=i**2+1

i+=1

yield s

for i in pingfangjianyi(10):

print(i)

def pingfangjianyi():
l=[2,3,5,7]
for j in l :
s=0
s=j**2+1

    yield s

for i in pingfangjianyi():
print(i)

l=[2,3,5,7]
l1=(x**2+1 for x in l )
print(list(l1))
l2=[i**2+1 for i in l]
print(l2)

生成器表达式和列表推导式的区别
就是生成器只能迭代一次
且现用现生成
而列表生成静态数据
l=[2,3,5,7]
l1=(x**2+1 for x in l )
l[1]=8
print(list(l1))

l=[2,3,5,7]
l2=[i**2+1 for i in l]
l[1]=8
print(l2)

[5, 65, 26, 50]
[5, 10, 26, 50]

迭代工具函数
作用是生成一个个性化的可迭代对象
函数 zip(iter1[,iter2[……]])
返回一个zip对象此对象用于生成元组,
该元组的每个数据来源于参数中的可迭代对象当最小的可迭代对象向不在提供数据
时迭代结束
enumerate(iterable[,start])
生成带索引的枚举对象
返回对象为索引值(index-value)
默认索引从零开始
也可以用start
指定
enumerate(sequence, start=0)

def hanshu():
l=[]
while True:
x=input(‘亲输入’)

    if x=='':
        break
    l.append(x)

for s in enumerate(l,1):
    print('第%s行:'%s[0],s[1])

hanshu()

猜你喜欢

转载自blog.csdn.net/weixin_32759777/article/details/81911669