Day 19 迭代器和生成器,json数据

Day 19 迭代器和生成器,json数据

1.迭代器(iter)

序列
在这里插入图片描述

迭代器是序列

在这里插入图片描述

1.创建迭代器的方式有两种:

1)将其他序列转换成迭代器

2)生成器

特点:1)不能直接查看所有元素(打印迭代器不会显示所有元素)

​ 2)迭代器没法直接同级元素个数

​ 3)如果想要获取迭代器的某个元素必须先将这个元素从迭代器中取出,取出来的元素不能重新再放回迭代器中,获取元素的时候只能获得当前迭代器的第一个元素(最顶层的元素)

列表是一个无盖的箱子,能知道元素个数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sv4S7THb-1614603057136)(C:\Users\72405\Desktop\QQ图片20210227092745.png)]

2.查 — 获取迭代器中的元素

不管以什么样的方式获取到了迭代器中的某个元素,那么这个元素一定会从迭代器中消失

1)查单个

next(迭代器) - 获取迭代器当前最上层元素

iter1 = iter('hello')
print(iter1)        # 'hello'
print(next(iter1))  # 'h'
print(next(iter1))  # 'e'
print(next(iter1))  # 'l'
print(next(iter1))  # 'l'
print(next(iter1))  # 'o'
print(next(iter1))  # 报错!因为迭代器中已经没有元素了

2)遍历

for 变量 in 迭代器:
循环体(变量依次获取迭代器中的每个元素)

iter1 = iter('hello')
for x in iter1:
    print('x', x)
"""
x h
x e
x l
x l
x o
"""    
iter2 = iter('python')
next(iter2)     # 获取最上层元素p,查完之后就取出
for x in iter2:  # 遍历之后就变成空的了
    print('x', x)
"""
x y
x t
x h
x o
x n
"""

2.生成器

1.什么是生成器

生成器从容器角度是一种特殊的迭代器、生成器获取元素的方式和迭代器一样。

2.怎么创建生成器

调用一个带有yeild关键字的函数就可以得到一个生成器(只要函数体中有yeild就行,不管yeild在函数执行的时候是否有效)

函数中如果有yield:

a.调用函数不会执行函数体

b.不会获取函数返回值

c.函数调用表达式的结果是生成器

def func1():
    print('函数')   # 函数
    return 100

result = func1()
print(result)      # 100

def func1():
    yield
    print('函数')
    return 100

result = func1()
print(result)    # <generator object func1 at 0x000002226661C350>

3.确定生成器产生数据的个数和值

1)生成器能产生多少个数据,看生成器对应的函数的函数体在执行过程中会遇到几次yield

def func3():
    yield
    print('函数')
    return 100

gen1 = func3()
print(gen1)                # <generator object func3 at 0x0000020AEF1FC350>

2)生成器产生的数据由yield关键字后面的决定

def func3():
    yield 100
    yield '小明'
    yield 6

gen1 = func3()
print(next(gen1))  # 100
print(next(gen1))  # '小明'
print(next(gen1))  # 6
print(next(gen1))  # 报错,StopIteration

3)生成器产生数据的原理

调用函数创建生成器的时候不会执行函数体

获取生成器的元素的时候就会执行函数体,执行过程中遇到yield就停下来,并且将yield后面的数据作为这次获取元素的结果;并且记录结束位置,下一次再获取元素的时侯就接着上一次结束的位置接着执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值