灵虚御风
醉饮千觞不知愁,忘川来生空余恨!

导航

 
""""""
"""1.生成器"""

"""
生成器:用户自定义的迭代器,本质就是迭代器

"""
# def func():
# print('first')
# yield 666 # 函数内如果有yield关键字,那么加括号执行函数的时候并不会触发函数体代码的运行
# print('second')
# yield 777
# print('third')
# yield 888
# print('forth')
# yield
# yield
# # yield后面跟的值就是调用迭代器__next__方法你能得到的值
# # yield既可以返回一个值也可以返回多个值 并且多个值也是按照元组的形式返回
# g = func() # 生成器初始化:将函数变成迭代器
# print(g)
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())



# print(range(1,10))

# for i in range(1,10,2):
# print(i)

def my_range(start,end,step=1):
while start < end:
yield start
start += step


for j in my_range(1,100,2):
print(j)





"""2.生成器表达式"""

# 列表生成式
# res = [i for i in range(1,10) if i != 4]
# print(res)

# res = (i for i in range(1,100000000) if i != 4) # 生成器表达式
# print(res)
# """
# 生成器不会主动执行任何一行代码
# 必须通过__next__触发代码的运行
# """
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())


# 占内存
# f = open('13.迭代器,生成器,常用内置方法','r',encoding='utf-8')
# data = f.read()
# print(len(data))
# f.close()


# with open('13.迭代器,生成器,常用内置方法','r',encoding='utf-8') as f:
# # n = 0
# # for line in f:
# # n += len(line)
# # print(n)
# g = (len(line) for line in f)
# # print(g.__next__())
# # print(g.__next__())
# # print(g.__next__())
# # print(g.__next__())
# print(sum(g))



def add(n,i):
return n+i
def test():
for i in range(4):
yield i
g=test()

for n in [1,10]:
g=(add(n,i) for i in g)
# 第一次for循环g=(add(n,i) for i in test())

# 第二次for循环g=(add(n,i) for i in (add(n,i) for i in test()))
print(n)
res=list(g)

"""
for i in (add(10,i) for i in test()): 会执行所有的生成器内部的代码
add(n,i)
"""




#A. res=[10,11,12,13]
#B. res=[11,12,13,14]
#C. res=[20,21,22,23] 答案
#D. res=[21,22,23,24]
posted on 2022-03-24 16:03  没有如果,只看将来  阅读(20)  评论(0编辑  收藏  举报