安卓学习笔记05

1.可迭代对象

for循环迭代本质(内部构造)

l = [1, 2, 3, 4]
# for i in l:
#     print(i)
ite = l.__iter__()  # 接收一下iter()干了什么
print(ite)  # 打印
print(ite.__next__())  # for循环干第2件事情的时候做的第1步
print(ite.__next__())  # for循环干第2件事情的时候做的第2步
print(ite.__next__())  # for循环干第2件事情的时候做的第3步
print(ite.__next__())  # for循环干第2件事情的时候做的第4步
l = [1, 2, 3, 4]
# for i in l:
#     print(i)
ite = iter(l)  # 接收iter()干了什么
print(ite)  # 打印
print(next(ite))  # for循环于第2件事情的时候做的第1步
print(next(ite))  # for循环于第2件事情的时候做的第2步
print(next(ite))  # for循环于第2件事情的时候做的第3步
print(next(ite))  # for循环于第2件事情的时候做的第4步

1.内置函数 iter() 的本质是 inter() ,都是返回一个迭代器。
2.内置函数 next() 的本质是 next(),都是有了迭代器之后获取元素。

2.迭代器

序列

序列分为 有序序列 和 无限序列

1.有序序列

生成返回迭代器

a = range(4)
print(a.__iter__())
# 结果为生成返回迭代器

迭代器是由__iter__()生成,可以通过__next__()进行调用

2.无序序列

import itertools

a = itertools.count()  # 生成迭代器
print(next(a))  # 获取迭代器里面的元素并打印
print(next(a))  # 获取迭代器里面的元素并打印
print(next(a))  # 获取迭代器里面的元素并打印
print(next(a))  # 获取迭代器里面的元素并打印

生成一个无范围迭代器 (无限迭代器 / 无限序列) :模块itertools 中的 方法count( )
模块itertools用于高效循环的迭代函数集合

3.生成器

1.列表推导式

列表推导式:生成列表的一种方法

l = [ i for i in 可迭代对象 ]
i 表示列表中要放入的对象; for循环是一个式子

l = [i for i in range(5)]
print(l)

l = [i for i in range(5) if 4 < 5]  # 条件判断(此处为真)
print(l)

l = [i * 2 for i in range(5)]
print(l)

l = [i * 2 for i in 'abcd']
print(l)


# 用函数来进行操作
def fun(a):
    return a * 2


l = [fun(i) for i in 'abcd']  # 列表不是迭代器
print(l)

2.生成器的创建

1.方法一:改为括号使用

生成器是个特殊的迭代器,是可迭代对象

l = ( i for i in 可迭代对象)
中括号变为圆括号

l = (i for i in 'abcd')  # 括号括起来的是生成器
print(next(l))  # next()为调用,只有l为迭代器时可以使用

2.方法二:yield函数创造生成器

1.函数中使用yield
# 一个函数中包含yield可以创建出生成器
def fun():
    a = 10
    while 1:
        a += 1
        yield a  # yield将函数编程生成器


b = fun()
print(b)
# 结果为生成返回迭代器

print(next(b))
print(next(b))
print(next(b))
print(next(b))
# 输出循环结果

2.函数中不使用yield

将成为死循环无限生成并调用迭代器对象

def fun():
    a = 10
    while 1:
        a += 1
        print(a)


fun()

程序将进入死循环,a一直自己加1
提前生成了迭代器,并调用了全部迭代器对象,是占用资源的放大镜

4.总结

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值