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

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

一.生成器

生成器的本质就是迭代器

生成器的特点和迭代器一样,取值方式和迭代器一样__next__(),send():给上一个yield.

生成器一般由生成器函数或者生成器表达式创建,其实就是手写的迭代器.

def func():    print("111")    yield 222gener = func() #这个时候函数不会执行,而是获取生成器ret = gener.__next__() #这个时候函数才会执行,yield的作用和return一样,也是返回数据print(ret)结果:111222

yield和return的效果是一样的,区别是yield是分段来执行一个函数,return是直接停止执行函数

 

二.生成器函数

和普通函数没有区别,里面有yield的函数就是生成器函数.

生成器函数在执行的时候,默认不会执行函数体,返回生成器. 通过生成器的__next__()分段执行这个函数. send()给上一个yield传值,不能在开头(没有上一个yield),最后一个yield也不可以用send()

send 和__next__()区别:

1.send和next()都是让生成器向下走一次

2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码的时候不能使用send()

生成器可以使用for循环获取内部元素.

三.推导式.

1.列表推导式[结果 for循环 条件筛选]

2.字典推导式 {k:v for循环 条件筛选}

3.集合推导式{k for 循环 条件}

四.生成器表达式

(结果 for 循环 条件) 特点: 1.惰性机制 2.只能向前 3,节省内存

生成器表达式和列表推导式的区别:

1.列表推导式比较耗内存,一次性加载,生成器表达式几乎不占内存,使用的时候才分配和使用内存.

2.得到的值不一样.列表推导式得到的是一个列表,生成器表达式获得的是一个生成器

转载于:https://www.cnblogs.com/liuqingyang/p/9468370.html

你可能感兴趣的文章
记录:一次数据库被恶意修改配置文件的问题
查看>>
redis 持久化
查看>>
解决Jupyter notebook[import tensorflow as tf]报错
查看>>
Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
查看>>
python网络画图——networkX
查看>>
ubuntu16.04文件形式安装mongodb
查看>>
SpringBoot------ActiveMQ安装
查看>>
详细了解 int? 类型
查看>>
字符串匹配 ?kmp : hash
查看>>
mongod.service: control process exited, code=exited status=1
查看>>
c# 发送邮件、附件 分类: C# 2014-12-...
查看>>
对360来说,江湖上再无“搜狗”这个传说
查看>>
composer
查看>>
OpenCV特征点检测——ORB特征
查看>>
mysql的csv数据导入与导出
查看>>
leetcode笔记:Pascal's Triangle
查看>>
ASP.NET性能优化之构建自定义文件缓存
查看>>
apicloud UISearchBar 使用方法
查看>>
【spring+websocket的使用】
查看>>
mongo二维数组操作
查看>>