迭代器

迭代器

什么是迭代器:

迭代:更新换代的过程,每次迭代都必须基于上一次的结果

迭代器:迭代取值的工具

 

迭代器特点:

1:只能往后面走,

 

为什么要用:

迭代器给你提供了一种不依赖于索引的取值方式

 

可迭代对象:

只要内置有iter方法的都叫作可迭代对象

# 读法: 双下iter(标准一些) or 魔法方法

n = 1 # 没有

f = 1.1 # 没有

s = 'hello' # 有

l = [1,2,3] # 有

t = (1,2,3) # 有

s1 = {1,2,3} # 有

d = {'1':'2'} # 有

f1 = open('xx.txt','w',encoding='utf-8') # 有

文件对象本身就是迭代器对象

def func():pass # 没有

 

需要迭代取值的数据类型

"""

字符串,

列表,

元组,

字典,   # 无序

集合,   # 无序

文件对象  # 本来就是迭代器对象

"""

 

如何用:

# 不是迭代

n = 0

while True:

print(n)

# 算是迭代(依赖索引)

l = [1,2,3,4]

n = 0

while n < len(l):

print(l[n])

n += 1

 

 

迭代器取值

迭代器取值迭代器对象

1:对象有iter方法

2:内置有next方法

ps:迭代器一定是可迭代对象

可迭代对象不一定是迭代器对象………………7.04(03)

可迭代对象不会直接由next

 

(文件 本身就是迭代器对象)

 

迭代器取值

 

l = [1,2,3,4]

# 生成一个迭代器对象

iter_l = l.iter()

 

# 迭代器取值 调用next

print(iter_l.next()) # >>>1

print(iter_l.next()) # >>>2

print(iter_l.next()) # >>>3

print(iter_l.next()) # >>>4

print(iter_l.next()) # 取完了 直接报错

 

 

 

 

for循环原理

for循环内部的本质

1.将in后面的对象调用iter转换成迭代器对象

2.调用next迭代取值

3.内部有异常捕获StopIteration,当next报这个错 自动结束循环

 

for循环

'''

for循环后面的跟的是可迭代对象

 

for 循环内部的本质

1:将in后面的对象效调用iter转换为迭代器对象s

所以有一个'print(iter_f is f1'

 

迭代器对象无论执行多少次执行iter方法,得到的还是迭代器本身

 

 

2:调用next迭代取值

3:内部有异常捕获StopIteration的方法,遇到错误就结束循环

'''

 

 

生成器

生成器:用户自定义的迭代器,本质就算迭代器

 

yield

 

迭代器生成器:

 

def func():

print('first')

yield 1 # 如果函数内部有yield关键字,那么加括号运行的时候不会触发函数内部代码执行

func() # 初始化生成器()

 

 

生成器表达式

res = (i for i in range(1,10) if i != 4) # 生成器表达式

# # 生成器写好了不会主动执行任何一行代码

# # 必须通过next触发代码执行

# # 写好的时候不执行,只是调用的时候才执行,

 

print(res.next())

print(res.next())

print(res.next())

print(res.next())

 

 

posted @ 2019-07-15 19:39  Pscly  阅读(173)  评论(0编辑  收藏  举报