一、生成器

  生成器的本质就是迭代器

  生成器的特点和迭代器一样。取值方式和迭代器一样(__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. 生成器函数,推导式,生成器表达式

    一.生成器 1生成器的定义 生成器的本质是迭代器 生成器一般由生成器函数或者生成器表达式来创建 生成器是手写的迭代器 2.生成器的特点 生成器的特点和迭代器一样. (1)惰性机制 (2)节省内存 (3 ...

  2. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...

  3. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  4. format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  5. 生成器 生成器函数 各种推导式 生成器表达式

    生成器 本质就是迭代器. 一个一个的创建对象 创建生成器的方式: 1. 生成器函数 2. 通过生成器表达式来获取生成器 3. 类型转换(看不到) def func():print("我叫周润 ...

  6. python中哪个函数能生成集合_神奇的python系列11:函数之生成器,列表推导式

    1.生成器 生成器的本质是迭代器. 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 #函数 deffunc():prin ...

  7. python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式

    python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...

  8. 列表推导式 生成器表达式

    推导式 comprehensions(又称解析式):是 Python 中很强大的.很受欢迎的特性,具有语言简洁,速度快等优点 列表推导式 就是一个简单的公式,我们用这个列表推导式,把你好几行的for循 ...

  9. python列表推导式实现从1加到100_python之生成器和列表推导式

    一.生成器函数 1.生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.用以下两种方式构建一个生成器: ...

  10. python (八)迭代器、生成器、列表推导式

    一.迭代器 1.先来讲讲什么是可迭代对象 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 2.怎么判断是不是一个可迭代对象 判定方法:内部含有'__iter__'方法的数据就 ...

最新文章

  1. 使用 Python 从零开始开发区块链应用程序
  2. java StringBuffer类 常用方法
  3. python3菜鸟教程中文-Python3 数据结构
  4. python导入哨兵数据_Python 下载哨兵Sentinel数据(Sentinel-1~3)
  5. 链表python笔试题目_python经典面试算法题1.4:如何对链表进行重新排序
  6. leetcode 605. Can Place Flowers | 605. 种花问题
  7. 136. Single Number
  8. Collections.sort的两个方法
  9. 2019 牛客多校第9场 B Quadratic equation(二次剩余)
  10. ServletResponse的getOutputStream()与getWriter()使用冲突
  11. 用计算机计算实际利率,教你计算信用卡分期真实利率,算完大吃一惊!
  12. 华三数据中心SDN技术发展应用
  13. 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
  14. 面试——路径、转发与重定向的区别
  15. android网易云信使用方法,网易云信Android版demo修改为自己所用
  16. JavaSE学习总结第01天_Java概述
  17. 钟南山团队携手腾讯研发新冠重症AI预测模型,成果登上Nature子刊
  18. 网站另类推广玩法心得
  19. PAT 乙级 1086 python
  20. Linux Logrotate日志切割管理

热门文章

  1. python工作-Python自动化运维|Python语言工作岗位待遇如何?
  2. 学python编程-趣学Python编程
  3. python 爬虫源代码-python 爬虫-1:下载网页源代码
  4. python基础代码库-python基础--注册和登录功能 代码
  5. widnows命令行常用命令使用 和 windows创建文件,写内容到文件
  6. Linux系统目录结构说明
  7. spoj A Needle in the Haystack(rabin-karp)
  8. LeetCode Shortest Palindrome(kmp的妙用)
  9. LeetCode Maximal Rectangle(dp)
  10. 10分钟内把永远跑不完的存储过程变为2秒跑完