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

二. 生成器函数 (重点)
生成器函数中包含 yield , 返回数据和return差不多.
return会立即结束这个函数的执行
yield 可以分段的执行一个函数

生成器函数在执行的时候返回生成器. 而不是直接执行此函数

能向下执行的两个条件:
__next__(), 执行到下一个yield
send(), 执行到下一个yield, 给上一个yield位置传值

所有的生成器都是迭代器都可以直接使用for循环
都可以使用list()函数来获取到生成器内所有的数据

生成器中记录的是代码而不是函数的运行
def func():
print("我的天哪 ")

yield "宝宝"

gen = func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存
当执行到__next__(), 运行此空间中的代码, 运行到yield结束.

优点: 节省内存, 生成器本身就是代码. 几乎不占用内存
特点: 惰性机制, 只能向前. 不能反复

 def func():
print('我叫周润发')
yield '林志玲' # yield表示返回. 不会终止函数的执行
print('我干嘛了?')
yield '宝宝回来了'
print('宝宝你在干嘛')
yield '没了'
ret = func() # 执行函数,此时没有运行函数
# 此时我们拿到的是生成器
print('返回值是', ret) #<generator生成器 object func at 0x0000018DAC980EB8> # 执行到下一个yield
print(ret.__next__()) #第一次执行到__next__此时函数才开始执行
print(ret.__next__()) #执行到下一个yield
print(ret.__next__()) # StopIteration

三.各种推导式 (诡异)

列表推导式 [结果 for循环 if]

 lst = ['python%s期' % i for i in range(1, 19)]
print(lst)

字典推导式 {结果(k:v) for循环 if}

 dic = {"主食": "炒面", "副食": "小拌菜", "汤": "疙瘩汤"}
dic1 = {v: k for k, v in dic.items()}
print(dic1)

集合推导式 {结果(k) for循环 if}

 

生成器表达式

 g = (i for i in range(10))  # 生成器表达式

 print(g)  # <generator object <genexpr> at 0x000001C354050EB8>

 print(g.__next__())  #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #
print(g.__next__()) #

四.yield from

def func():
lst = ['衣服%s' %i for i in range(500)]
yield from lst # 可以吧一个可迭代对象 gen = func()
print(gen.__next__())
print(gen.__next__())
print(gen.__next__())

python生成器和各种推导式的更多相关文章

  1. python 生成器和各种推导式

    ##################################总结############################### 什么是迭代器? 可迭代对象通过__iter__()可以转换成迭代 ...

  2. Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数

    Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: ​ 就是迭代器 生成器产生的方式: ​ 1.生成器函数

  3. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  4. python之生成器和列表推导式

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

  5. python全栈开发day13-迭代器、生成器、列表推导式等

    昨日内容:函数的有用信息.带参数的装饰器.多个装饰器修饰一个函数 迭代器 可迭代对象:内部含有__iter__方法 迭代器 定义:可迭代对象.__iter__()就是迭代器,含有__iter__且__ ...

  6. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  7. Python之路----列表推导式和生成器的表达式

    列表推导式 egg_list=['鸡蛋%s'%i for i in range(10)] print(egg_list) 列表推导式 推导过程 egg_list = [] for i in range ...

  8. 《Python》 生成器和列表推导式

    一.初识生成器: 生成器就是自己用Python代码写的迭代器,生成器的本质就是迭代器. 1.Python中提供的生成器: 1.生成器函数: 使用yield语句而不是return语句返回结果.yield ...

  9. 巨蟒python全栈开发-第12天 生成器函数 各种推导式 yield from

    一.今日主要内容总览(重点) 1.生成器(目的:帮助我们创建对象) (1)生成器的本质就是迭代器 (2)一个一个的创建对象 (3)创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 ...

随机推荐

  1. 02Redis入门指南笔记(基本数据类型)

    一:热身 获得符合规则的健名列表:keys  pattern pattern支持glob风格的通配符,具体规则如下表: Redis命令不区分大小写.keys命令需要遍历Redis中的所有健,当键的数量 ...

  2. [Array]122. Best Time to Buy and Sell Stock II(obscure)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  3. E浏览器常见的9个css Bug以及解决办法

    我们在浏览网页的时候经常看见这样的现象:某个网页在IE6浏览器中打开很正常,但是在IE8里面打开可能完全变形了.或者也有可能出现完全相反的现象.这让Web程序员及设计师往往为了其CSS在各个IE版本下 ...

  4. hashhMap

    # hashMap原理 # HashMap是一个双列集合,是线程不安全的.以key.value的形式储存值.底层是由数组+链表+红黑树组成的,数组是HashMap的主干,链表则是主要为了解决哈希冲突而 ...

  5. Promise对象和async函数

    Promise对象 //1开始 function fna(){ console.log('1开始'); var p = new Promise(function(resolve, reject){ / ...

  6. 2018-2-13-C#-相对路径转绝对路径

    title author date CreateTime categories C# 相对路径转绝对路径 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23 ...

  7. 关于memset的使用

    有些oj上的G++支持 cstdio的memset,有些则支持stdio.h中的memset(划掉) 这两个头文件关系比较复杂, 具体我也说不清...按照c++文档中的说法,stdio已经deprec ...

  8. 洛谷P2912 [USACO08OCT]牧场散步Pasture Walking [2017年7月计划 树上问题 01]

    P2912 [USACO08OCT]牧场散步Pasture Walking 题目描述 The N cows (2 <= N <= 1,000) conveniently numbered ...

  9. 【CRT相关配置】

    1.选项——会话选项 2.回话调整如下: 3.日志文件记录保存,即保存所有输入的命令 文件名:%S-%T-%M-%D.txt,表示每天会存放到一个文件 选择:在连接上启动记录 和  追加到文件

  10. xmlns详解(转载)

    我们经常会在网页中碰到形如<html xmlns=”http://www.w3.org/2001/xhtml”>这样的代码, 或在是android 编码中的main.xml中看到形如< ...