python基础语法【迭代器 生成器】

1.迭代器

1.什么是迭代器(iter)

1)迭代器是容器型数据类型(可以遍历,也可以转换成其他容器),无法直接提供一个迭代器,只能将其他序列转换成迭代器。
2)特点:
a.打印迭代器的时候无法查看到元素有哪些。
b.无法通过len获取迭代器中元素的个数。
c.如果要使用迭代器中的元素必须将元素从迭代器中取出来(取走),取走的元素会从迭代器中永久的消失,用一个少一个。
d.任何数据都可以作为迭代器的元素。
e.只有序列可以转换成迭代器。

1)创建迭代器

i1 = iter('abc')
i2 = iter([10, 20, 30])
i3 = iter((100, 1.23, 'abc', True, [10, 20]))

2)打印迭代器无法查看元素

print(i1)  # <str_iterator object at 0x000001FCC5B58700>
print(i2)  # <list_iterator object at 0x000001FCC5B586D0>

3)迭代器无法统计个数

print(len(i1))  会报错!

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

无论以任何方式获取到了迭代器中某个元素,那么这个元素一定会从迭代器中消失。

1)获取单个元素:

next(迭代器) —— 获取迭代器最前面的元素

2)遍历迭代器:

for 变量 in 迭代器:
    循环体

3)案例:

i1 = iter('abc')
i2 = iter([10, 20, 30])
i3 = iter((100, 1.23, 'abc', True, [10, 20]))
print(next(i1))  # a
print(next(i1))  # b
print(next(i1))  # c,此时迭代器变为空了
# print(next(i1))  #没有东西了就会报错!

print(next(i2))  # 10
print(list(i2))  # [20, 30],这个时候迭代器是空的了
# 以任何方式将迭代器中数据取出来都会消失
# print(next(i2))  # 报错!
for x in i3:
    print(x)#[10, 20]
print(list(i3)) #[]

2.生成器

1.什么是生成器

类似母鸡,需要一个鸡蛋就生产一个鸡蛋。
1)生成器是容器:是一种可以创建多个数据的容器,生成器中保存的是创建数据的方法,而不是数据本身。
2)特点:
a.打印生成器无法查看元素;
b.也不能通过len()统计元素的个数;
c.如果需要生成器中的数据,必须将数据取出,而且取一个就少一个;
3)生成器获取元素的方法和迭代器获取元素的方法一样

2.创建生成器

调用带有yield关键字的函数,就可以得到一个生成器;


def func1():
    yield
    print("hello")
    return 100


result = func1()
print(result)

3.控制生成器

怎么控制生成器中元素的个数和元素的值?

执行创建生成器的函数体的时候,会遇到几次yield,对应的生成器就可以创建几个数据,每次遇到yield,yield后面的值就是能创建出来的数据。


def func2():
    print("123")
    yield 100
    print('234')
    yield 200
    print('234')
    yield 300


gen2 = func2()
print(gen2)
# 有三个数据,分别是100,200,300
print(next(gen2))
print(next(gen2))
print(next(gen2))
# print(next(gen2))报错!
def func2(n):
    yield 100
    if n % 2 == 0:
        yield 200
    yield 300


gen2 = func2(3)
print(gen2)
# 只有两个数据,分别是100,300;
print(list(gen2))
# print(next(gen2)) 报错,和迭代器是一个原理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值