码迷,mamicode.com
首页 > 编程语言 > 详细

python--生成器

时间:2019-04-08 21:14:45      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:turn   循环   特点   数据   item   运行   返回   send   占用   

一 . 生成器

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

 

  生成器函数 (重点)

技术图片
生成器函数中包含 yield , 返回数据和return差不多.
  return会立即结束这个函数的执行
  yield 可以分段的执行一个函数
  生成器函数在执行的时候返回生成器. 而不是直接执行此函数

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

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

  生成器中记录的是代码而不是函数的运行
技术图片

 

def func():
    print(‘赌神‘)
    yield ‘高进‘
g = func() # 创建生成器,此时运行会把生成器中的代码记录在内存,当执行到__next__(),运行此空间的代码,运行到yield结束.

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

二 . 各种推导式

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

lst = [‘张无忌‘,‘吴奇隆‘,‘刘诗诗‘,‘范冰冰‘,‘张翠山‘]
lst1 = [i for i in lst if i[0] == ‘张‘]
print(lst1) 

 

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

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

 

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

set = {‘赌神‘,‘赌圣‘,‘赌侠‘,‘侠客‘}
list = {k for k in set if k[0] == ‘赌‘}
print(list)

 

三 . 生成器表达式

( 结果 for循环 if )   # 用小括号括起来

python--生成器

标签:turn   循环   特点   数据   item   运行   返回   send   占用   

原文地址:https://www.cnblogs.com/uiys/p/10673145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!