博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.2生成器
阅读量:5927 次
发布时间:2019-06-19

本文共 1234 字,大约阅读时间需要 4 分钟。

生成器

列表表达式回顾

# -*-coding:utf-8 -*-__date__ = '2018/3/5'__author__ = 'xiaojiaxin'__file_name__ = '生成器'#a1=[x*2 for x in range(10000000000)] #全部加载至内存,列表表达式

生成器创建的两种方法

a=(x*2 for x in range(5))print(a)# 
at 0x000000E29B512990>#里面没有值!!!!生成器只是一个对象

生成器执行的两种方法

#就比如说列表和元组等都是菜,想吃就直接吃,生成器只是一个厨师,他会做菜,但是你要吃哪道菜,他才会去加载那一道菜#第一种方法:使用内置方法print(a.__next__())#0print(a.__next__())#2print(a.__next__())#4#第二种方法:使用next()方法print(next(a))  #等价于Python2.x  a.next()#6print(next(a))#8# print(next(a))    #报警:停止迭代# #StopIteration# print(next(a))#生成器就是一个可迭代对象(iteration迭代)
#for内部对b做了next()调用,之前的数据作为垃圾回收了#for循环检测是否还有数据,及时结束next()调用b=(x for x in range(10))for i in b:   #for内部对b做了next()调用,之前的数据作为垃圾回收了    print(i)  #for循环检测是否还有数据,及时结束next()调用
#生成器一共两种创建方式#第一种:(x for x in range(5))#第二种:yield

生成器函数与普通函数的区别

def foo():    print("haha")    return 1foo()#hahaprint(foo())   #执行函数,并返回返回值#haha#1print(foo)# 
def fou():    print("123")    yield 2    #只要有yield就是生成器对象    print("456")    yield 4fou()#      #空表示没有执行fou()函数print(fou())   #不执行函数,不返回函数返回值# 
print(fou)#
#fou()是一个生成器对象#有一个yield就只有一道菜,有多个yield就有多道菜next(fou()) #执行fou()生成器对象#123next(fou())

大家对内容有任何问题,欢迎留言,定在第一时间解答,谢谢大家!

转载于:https://blog.51cto.com/10777193/2092999

你可能感兴趣的文章
关于异或的一些东西和应用
查看>>
二叉树的实现(C#)
查看>>
PrincetonAlgorithm I - Assignment2 Deques and Randomized Queues
查看>>
系统日子打印记录
查看>>
【矩阵乘法】OpenJ_POJ - C17F - A Simple Math Problem
查看>>
[旧博客]Python 第一次
查看>>
Verify the Developer App certificate for your account is trusted on your device.
查看>>
神经网络- receptive field
查看>>
java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
查看>>
centos7.0搭建svn服务器
查看>>
JS多个对象添加到一个对象中
查看>>
九度 1376 最近零子序列
查看>>
yii---where or该如何使用
查看>>
非彼拉且数列的实现
查看>>
高性能缓存服务器Squid架构配置
查看>>
在Hyper-V下安装Windows 8
查看>>
Android:ZoomControls控件
查看>>
xshell 通过ssh连接 ubuntu15_x64
查看>>
mysql 2013错误解决
查看>>
Windows Server 2012 存储去重
查看>>