生成器、生成器函数、推导式、生成器表达式
一、生成器
生成器的本质就是迭代器
生成器的特点和迭代器一样。取值方式和迭代器一样(__next__(),send():给上一个yield传值)
生成器一般由生成器函数或者生成器表达式来创建
其实就是手写的迭代器
def func():print("111")yield 222 ret = func() print(ret) # <generator object func at 0x0000028F2C062CA8>
因为函数中存在yield,那么这个函数就是一个生成器函数。这个时候我们在想执行函数就不再是执行函数了,而是获取这个生成器。
def func():print("111")yield 222 gener = func() #这个时候函数不会执行,而是获取到生成器 ret = gener.__next__() #这个时候函数才会执行,yield的作用和return一样也是返回数据 print(ret) # 111 # 222
def func():print("111")yield 222print("333")yield 444 gener = func() ret = gener.__next__() print(ret) ret2 = gener.__next__() print(ret2) ret3 = gener.__next__() #最后一个yield执行完毕,再次__next__()程序报错,也就是说和return无关了 # Traceback (most recent call last): # 111 # 222 # 333 # 444 # File "F:/pythonworkspace/day13/day13练习.py", line 52, in <module> # ret3 = gener.__next__() # StopIteration
View Code
send和__next__()区别:
1.send和next()都是让生成器想下走一次
2.send可以给上一个yield的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码的时候不能使用send(),最后一次也不能使用。
二、生成器函数
和普通函数没有区别,里面有yield的函数就是生成器函数
生成器函数在执行的时候。默认不会执行函数体,返回生成器
通过生成器的__next__()分段执行这个函数
send()给上一个yield传值,不能在开头(没有上一个yield),最后一个yield也不可以用send()
三、推导式
用一句话来生成一个列表
lst = ["python"+str(j) for j in range(1,16)] print(lst)
语法:[结果 for循环 判断]
四、生成器表达式
生成器表达式和列表推导式的语法基本上是一样的。只是把[]替换成()
生成器表达式和列表推导式的区别:
1.列表推导式比较耗内存。一次性加载,生成器表达式几乎不占用内存,使用的时候才分配和使用内存。
2.得到的值不一样,列表推导式得到的是一个列表,生成器表达式获取的是一个生成器。
总结:推导式有,列表推导式,字典推导式,集合推导式,没有元组推导式
**生成器只有在要值得时候才拿值
def add(a, b):return a + b # 生成器函数 # 0-3 def test():for r_i in range(4):yield r_i # 0,1,2,3 g = test() # 获取生成器 for n in [2, 10]:g = (add(n, i) for i in g) print(list(g)) #[20,21,22,23]
转载于:https://www.cnblogs.com/qq849784670/p/9468699.html
生成器、生成器函数、推导式、生成器表达式相关推荐
- 生成器函数,推导式,生成器表达式
一.生成器 1生成器的定义 生成器的本质是迭代器 生成器一般由生成器函数或者生成器表达式来创建 生成器是手写的迭代器 2.生成器的特点 生成器的特点和迭代器一样. (1)惰性机制 (2)节省内存 (3 ...
- python之生成器(~函数,列表推导式,生成器表达式)
一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...
一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...
- 生成器 生成器函数 各种推导式 生成器表达式
生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) def func():print("我叫周润 ...
- python中哪个函数能生成集合_神奇的python系列11:函数之生成器,列表推导式
1.生成器 生成器的本质是迭代器. 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 #函数 deffunc():prin ...
- python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式
python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...
- 列表推导式 生成器表达式
推导式 comprehensions(又称解析式):是 Python 中很强大的.很受欢迎的特性,具有语言简洁,速度快等优点 列表推导式 就是一个简单的公式,我们用这个列表推导式,把你好几行的for循 ...
- python列表推导式实现从1加到100_python之生成器和列表推导式
一.生成器函数 1.生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.用以下两种方式构建一个生成器: ...
- python (八)迭代器、生成器、列表推导式
一.迭代器 1.先来讲讲什么是可迭代对象 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 2.怎么判断是不是一个可迭代对象 判定方法:内部含有'__iter__'方法的数据就 ...
最新文章
- 使用 Python 从零开始开发区块链应用程序
- java StringBuffer类 常用方法
- python3菜鸟教程中文-Python3 数据结构
- python导入哨兵数据_Python 下载哨兵Sentinel数据(Sentinel-1~3)
- 链表python笔试题目_python经典面试算法题1.4:如何对链表进行重新排序
- leetcode 605. Can Place Flowers | 605. 种花问题
- 136. Single Number
- Collections.sort的两个方法
- 2019 牛客多校第9场 B	Quadratic equation(二次剩余)
- ServletResponse的getOutputStream()与getWriter()使用冲突
- 用计算机计算实际利率,教你计算信用卡分期真实利率,算完大吃一惊!
- 华三数据中心SDN技术发展应用
- 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
- 面试——路径、转发与重定向的区别
- android网易云信使用方法,网易云信Android版demo修改为自己所用
- JavaSE学习总结第01天_Java概述
- 钟南山团队携手腾讯研发新冠重症AI预测模型,成果登上Nature子刊
- 网站另类推广玩法心得
- PAT 乙级 1086 python
- Linux Logrotate日志切割管理
热门文章
- python工作-Python自动化运维|Python语言工作岗位待遇如何?
- 学python编程-趣学Python编程
- python 爬虫源代码-python 爬虫-1:下载网页源代码
- python基础代码库-python基础--注册和登录功能 代码
- widnows命令行常用命令使用 和 windows创建文件,写内容到文件
- Linux系统目录结构说明
- spoj A Needle in the Haystack(rabin-karp)
- LeetCode Shortest Palindrome(kmp的妙用)
- LeetCode Maximal Rectangle(dp)
- 10分钟内把永远跑不完的存储过程变为2秒跑完