"""
yield --> 生成器
""""""
# 生成器:可迭代对象(可以参与for) + 迭代器(产生数据)
calss Generator:
def __iter__(self):
return self
def __next__(self):
...
"""defmy_range(stop):
number =0while number < stop:yield number
number +=1# for item in my_range(5):# print(item) # 0 1 2 3 4# 惰性操作/延迟操作
my = my_range(5)
iterator = my.__iter__()whileTrue:try:
item = iterator.__next__()print(item)except StopIteration:break
"""
定义函数,在列表中获取所有偶数.
-- 传统思想:将结果存入新列表再返回
-- 生成器思想:将结果交给生成器对象推算
通过调试,体会惰性操作
"""
list01 =[43,42,68,66,78,87,453,4]defget_even01():
list_result =[]for item in list01:if item %2==0:
list_result.append(item)return list_result
result = get_even01()for item in result:print(item)defget_even02():for item in list01:if item %2==0:yield item
result = get_even02()for item in result:print(item)
2. 内置生成器
2.1 枚举函数 enumerate
语法:
for 变量 inenumerate(可迭代对象):
语句
for 索引, 元素inenumerate(可迭代对象):
语句
作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
2.2 zip
语法:
for item inzip(可迭代对象1, 可迭代对象2….):
语句
作用:将多个可迭代对象中对应的元素组合成一个个元组,生成的元组个数由最小的可迭代对象决定。
3. 生成器表达式
定义:用推导式形式创建生成器对象。
语法:变量 = ( 表达式 for 变量 in 可迭代对象 [if 真值表达式] )
"""
参照下列代码,自定义生成器my_enumerate.
"""defmy_enumerate(iterable):
index =0for item in iterable:yield(index, item)
index +=1
dict01 ={"悟空":26,"八戒":28}for item in my_enumerate(dict01):print(item)for item inenumerate(dict01):print(item)
"""
生成器表达式
"""# 列表推导式
list01 =[34,43,54,65,67,7]
list02 =[item for item in list01 if item >10]for item in list02:print(item)
generator02 =(item for item in list01 if item >10)for item in generator02:print(item)for item in(item for item in list01 if item >10):print(item)
"""
1. 使用生成器表达式在list01中找出所有字符串
2. 使用生成器表达式找出所有大于10的整数
"""
list01 =["悟空",57,"八戒",True,"三藏",5.8,10,90]for element in(item for item in list01 iftype(item)==str):print(element)for element in(item for item in list01 iftype(item)==intand item >10):print(element)