小学生都能学会的python(生成器)

1. 生成器

生成器的本质就是迭代器.

生成器由生成器函数来创建或者通过生成器表达式来创建

# def func():

# lst = []

# for i in range(10000):

# lst.append("衣服%s" % i)

# return lst

# lst = func()

# print(lst)

# def func():

# for i in range(1, 10000):

# yield "衣服%s" % i

#

# gen = func()

# for i in range(50):

# yf = gen.__next__()

# for i in range(50):

# yf = gen.__next__()

# for i in range(50):

# yf = gen.__next__()

# def func():

# lst = []

# for i in range(1, 10000):

# lst.append("衣服%s" % i)

# if i % 50 == 0:

# yield lst

# lst = [] # 新的装衣服的地方

#

# gen = func()

# yf1 = gen.__next__()

# print(yf1)

# yf2 = gen.__next__()

# print(yf2)

# yf3 = gen.__next__()

# print(yf3)

# yf4 = gen.__next__()

# yf5 = gen.__next__()

# print(yf1)

# print(yf2)

# print(yf3)

# print(yf4)

# print(yf5)

# 生成器:本质是迭代器, 写法和迭代器不一样. 用法和迭代器一样

# 生成器函数: 函数中带有yield, 执行生成器函数的时候返回生成器。而不是执行这个函数

# def func():

# print("你好啊, 我叫赛利亚,")

# yield "西岚的武士刀" # return 和yield都可以返回数据

#

# ret = func() # generator ret是一个生成器

# print(ret)

# s = ret.__next__() # 当执行到__next__()的时候, 函数才真正的开始执行

# print("接受到的是", s)

# def func():

# print("打开手机")

# print("打开陌陌")

# yield "手机"

# print("约妹子")

# print("出来喝喝茶")

# yield "电脑"

# print("我加了一句话")

# gen = func() # 生成器

# ret1 = gen.__next__()

# print(ret1)

# ret2 = gen.__next__()

# print(ret2)

# ret3 = gen.__next__() # 找不到最后一个yield 会报错

# print(ret3)

#

# 特点:

# 1. 节省内存, 几乎不占用内存

# 2. 惰性机制

# 3。只能往前走

# send() 也可以实现类似__next__()的效果, send()可以给上一个yield传值

#

# def func():

# print("韭菜盒子")

# a = yield "哇哈哈"

# print("肉包子", a)

# b = yield "脉动"

# print("锅包肉", b)

# yield "冰红茶"

#

# gen = func()

# ret = gen.send("胡辣汤")

# print(ret)

#

# ret = gen.send("刘伟") # 给上一个yield传值

# print(ret)

#

# ret = gen.send("刘德华") # 给上一个yield传值

# print(ret)

# send()和__next__()的区别

# send不可以用在开头

# send可以给上一个yield传值, 不能给最后一个yield传值

def func():

yield "麻花藤"

yield "李彦宏"

yield "马云"

yield "刘强东"

gen = func()

# print(gen.__next__()) # 麻花藤

# print(gen.__next__()) # 麻花藤

# print(gen.__next__()) # 麻花藤

# print(gen.__next__()) # 麻花藤

# 生成器的本质是迭代器.

# print("__iter__" in dir(gen))

#

# # 生成器可以直接使用for循环

# # for el in gen:

# # print(el)

#

# lst = list(gen) # 把生成器中的每一个数据拿出来组合成一个列表

# print(lst)

2. 生成器函数

生成器函数:在函数中return换成yield. 这个函数就是生成器函数

def func():

yield

gen = func() 函数并不会被执行, 而是创建一个生成器对象

取值:

gen.__next__() 下一个

gen.send() 可以给上一个yield传值, 第一次执行不能用send()

特性:

1. 节省内存

2. 惰性机制

3. 只能向前

3. 各种推导式

# 列表:装python1期, python2期。。。。。。

# lst = [] # 创建列表

# for i in range(1, 17): # 循环1-16

# lst.append("python%s" % i) # 装数据

# print(lst)

# 推导式

# 列表推导式 : [结果 for循环 if筛选]

lst = ["python%s" % i for i in range(1, 17)]

print(lst)

# 创建列表: [1,3,5,7,9..99]

lst = [i for i in range(1, 100, 2)]

print(lst)

lst = [i for i in range(1,100) if i % 2 == 1]

print(lst)

# 获取1-100内能被3整除的数

# lst = [i for i in range(1, 101) if i % 3 == 0]

#

# # 100以内能被3整除的数的平⽅

# lst = [i*i for i in range(1, 101) if i % 3 == 0]

# 寻找名字中带有两个e的⼈的名字

# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven','Joe'],

# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

#

# lst = [name for first in names for name in first if name.count("e") >= 2 ]

# print(lst)

# 字典推导式, {key: value for循环 if 筛选}

# dic = {"张无忌":"九阳神功", "乔峰":"降龙十八掌", "楚留香":"帅"}

# d = {dic[k]: k for k in dic}

# print(d)

# lst1 = ["东北", "陕西", "山西", "开封", "杭州", "广东", "济南"]

# lst2 = ['大拉皮', "油泼面", "老陈醋", "灌汤包", "西湖鲤鱼", "早茶", "胶东一锅鲜"]

#

# dic = {lst1[i]:lst2[i] for i in range(len(lst1))}

# print(dic)

# 集合推导式 无序不重复 可哈希

# {key for if}

# lst = ["周杰伦","周伯通","周润发","周伯通","周笔畅","周伯通","周星驰","周伯通"]

# s = {el for el in lst}

# print(s)

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

2.字典推导式: { key: value for循环 if条件}

3.集合推导式: {key for循环 if条件}

(结果 for循环 if条件)

惰性机制

记录在内存中的一段代码.

# 元组没有推导式

# [结果 for if]

# {key for if}

# {key:value for if}

# (结果 for if) # 生成器表达式, 拿到的是生成器

# 可以使用生成器表达式直接创建生成器

# gen = (i for i in range(10)) # generator

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# print(gen.__next__())

# 生成器表达式: 记录一下代码。 然后每次需要的时候去生成器中执行一次这个代码

# 列表推导式: 一次性把所有的数据创建出来, 容易产生内存浪费

# 特性:

# 1. 节省内存

# 2. 惰性机制

# 3.只能向前。

# 生成器函数

# def func():

# print(111)

# yield 222

#

# g = func() # 生成器

#

# g1 = (i for i in g) # 生成器

# g2 = (i for i in g1) # 生成器

#

#

# print(list(g1)) # 222

# print(list(g2))

# print(list(g)) # 才会开始真正的取数据

# 计算两个数的和

def add(a, b):

return a + b

# 生成器函数, 0-3

def test():

for r_i in range(4):

yield r_i

# 获取到生成器

g = test() # 惰性机制

for n in [2, 10]:

g = (add(n, i) for i in g) # 循环的内部也是一个生成器

# __next__()

# list()

print(list(g)) # 刚开始拿数据

# 生成器记录的是代码

python小学生课本剧_小学生都能学会的python(生成器)相关推荐

  1. python小学生课本剧_小学生都能学会的python(小数据池)

    小学生都能学会的python(小数据池) 1. 小数据池. 目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存:int, str, bool. int: 缓存范围 -5~256 ...

  2. python网易云收费_小白都能学会的Python爬虫网易云音乐

    配置基础 python Selenium Chrome浏览器(其它的也可以,需要进行相应的修改) 分析 如果爬取过网易云的网站的小伙伴都应该知道网易云是有反爬取机制的,POST时需要对一些信息的参数进 ...

  3. python是人都能学会_人人都能学会的python编程教程15:高级特性2

    生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题 ...

  4. python小学生课本剧_二年级上学期课本剧

    我们把这美丽的景色看个够. (二人分别立在舞台两边,向远处眺望,作观赏状.) 小洁:(开心地)啊,岸上的景色真美! 小刚:瞧,那些奇形怪状的石头真好看! (石蛙.石鹰.石兔.石龟边舞边上上) 石蛙:我 ...

  5. 吴枫 python小课账号_无门槛速学编程——Python小短课,自上而下分而治之

    [Python小短课 11]自上而下,分而治之 做任何事都需计划,编程也是. 譬如写文章要列大纲.作画要想布局,编程也需先谋全局,而后思虑细节. 就以上回说到的"找宝藏"这个程序举 ...

  6. python小学生能学嘛_小学生都能学会的python(深浅拷贝)

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  7. 小学生python-小学生都能学会的python(函数)

    小学生都能学会的python(函数) 神马是函数 函数: 对功能或者动作的封装 函数的定义 def 函数名(形参列表): 函数体(return) ret = 函数名(实参列表) 函数的返回值 retu ...

  8. 小学生在家自学python_小学生都能学会的python(函数)

    小学生都能学会的python(函数) 神马是函数 函数: 对功能或者动作的封装 函数的定义 def 函数名(形参列表): 函数体(return) ret = 函数名(实参列表) 函数的返回值 retu ...

  9. 小学生都能学会的python(闭包和迭代器)

    小学生都能学会的python(闭包和迭代器) 1. 函数名第一类对象 函数名其实就是变量名 1). 可以像变量一样互相赋值. 2). 可以作为函数的参数,进行传递 3). 可以作为返回值返回 4). ...

最新文章

  1. python 字典中的value 不在字典中,key才在
  2. Slog21_支配vue框架模版语法之v-pre
  3. android点滴(25)之 original-package
  4. C++成员函数在内存中的存储方式
  5. 一张图片教你识别Vue的premission的权限管理,您细品\(^o^)/~
  6. ubuntu安装proxychains及自动补全
  7. Dev Treelist使用经验(2)
  8. diskgenius创建efi分区_DISKGEN 专业版修改硬盘为GPT分区 ESP分区图文教程
  9. vue--配套axios用法
  10. “酸碱体质理论”是个骗局
  11. 数学建模预测模型实例(二)---表白墙影响力量化模型
  12. Python数据处理(入门教程)
  13. 电气元件知识大全:实物图、作用、型号分类、工作原理、符号都有
  14. matlab如何求反渐开线函数,inv函数(inv函数查询表)
  15. Unity3d Platformer Pro 2D游戏开发框架使用教程
  16. timed out waiting for to be synced
  17. 世界上十个著名悖论详解
  18. 泵引理 Pumping Lemma
  19. 1. mysql安装
  20. 艺赛旗(RPA)RPA8.0 解决滑动验证码完整流程

热门文章

  1. Android 添加蓝牙遥控按键
  2. .NET CORE Microsoft.Exchange.WebServices EWS发送邮件
  3. Elasticsearch系列之:Centos7安装部署Elasticsearch详细步骤
  4. 2015大连落户新政详解
  5. Java实现杨辉三角的打印
  6. 【华为OD机试 】 免单统计(C++ Java JavaScript Python)
  7. python爬虫+词云生成小说简介
  8. 长江大学计算机科学学院在哪个校区,湖北理工学院有几个校区及校区地址
  9. 灵魂拷问:java的String到底可不可变?
  10. 你们要的代码来了!爬了菊姐的两万条评论——详细代码解读篇