iter1 =[i for i inrange(100000)]# 列表推导式
iter2 =(i for i inrange(100000))# 生成器推导式# iter1占了824440字节 iter2占了96字节 (单位应该是字节)print(f"列表推导式生成的数据占用内容空间的大小:{iter1.__sizeof__()}\n"
f"生成推导式生成的诗句占用内存空间的大小:{iter2.__sizeof__()}")print(len(iter1))# 长度是100000print(iter2)# 输出的是生成器对象的内存地址for i in iter2:# 方式一:for循环可以遍历输出生成器的内容print(i)if i ==100:break
defiter_yield():print("-"*20)yield1print("-"*20)yield2print("-"*20)yield3
i_y = iter_yield()# 想要运行生成器函数中代码需要 for 或者 next 调用# 值 = next(生成器对象):执行一次生成器对象取出一个值,类似于for循环的底层whileTrue:try:
i =next(i_y)print(i)except StopIteration as err:break# sys.exit()
# 生成器函数 - 斐波那契deffibonacci(n):
a, b, counter =0,1,0whileTrue:if(counter > n):returnyield a
a, b = b, a + b
counter +=1# f 是一个迭代器,由生成器返回生成
f = fibonacci(10)print(f)# print(tuple(f)) # 可以直接转成元组# print(list(f)) # 可以直接转成元组for value in f:print(value, end=' ')print(list(f))// 使用一次后指针被