9月30日学习总结
一、迭代器
1.什么是迭代器(iter)
1.迭代器是容器型数据类型
2.创建迭代器:
(1)将其他序列转换成迭代器
(2)创建生成器
3.特点
a.打印不能查看到迭代器中的元素
b.不能通过len获取迭代器中元素的个数
c.如果要使用元素必须将元素从迭代器中取出,而且取出后无法放回
4.重要结论:不管用任何方式获取到了迭代器中的元素,那么被取到的元素一定会从迭代器中消失。
i1=iter('abc')
print(i1) #<str_iterator object at 0x0000020E8630B4C0>
#print(len(i1)) #: object of type 'str_iterator' has no len()
i2=iter([10,20,30,40])
print(i2) #<list_iterator object at 0x00000230677DB3D0>
# 2.获取元素
# 1)获取单个元素:next(迭代器)
i1=iter('abc')
print(next(i1)) #a
print(next(i1)) #b
print(next(i1)) #c
# print(next(i1)) #报错! StopIteration
i2=iter([10,20,30,40])
next(i2)
print(list(i2)) #[20, 30, 40]
# print(next(i2)) #报错! StopIteration
二、生成器
1.什么是生成器 - generator
1.生成器是一种容器:是一种特殊的迭代器(具备迭代器的特点)
2.怎么创建生成器
1.调用带有yield关键字的函数就可以得到一个生成器。
2.调用普通函数会执行函数体,并且获取函数返回值(函数调用表达式的值就是函数的返回值);如果被调用的函数中有yield,那么调用函数的时候不会执行函数体,也不会获取函数返回值,函数调用表达式的值是一个生成器对象
3.控制生成器元素的个数和元素的值
def func2():
yield
gen1=func2()
print(gen1) # <generator object func2 at 0x000001938B9C9510>
print(len(list(gen1))) # 1
# 练习:创建一个生成器,可以创建的数据:'py001'、'py002' ... 'py100'
def func():
for x in range(1,101):
yield f'py{x:0>3}'
gen1=func()
print(next(gen1)) # py001
# 练习:写一个创建一副扑克牌的生成器
# 花色:梅花,方块,黑桃,红桃
# 数字:
from random import shuffle
color=['♣','♦','♠','♥']
num=[str(x) for x in range(2,11)]+list('JQKA')
def get_poker():
for x in color:
for y in num:
yield x+y
yield 'JOKER'
yield 'joker'
gen1=get_poker()
# print(list(gen1))
# 洗牌(随机打乱列表中元素的顺序)
pokers=list(gen1)
shuffle(pokers)
print(pokers)