7月10日安排
 完成所有函数作业和思维导图整理
 
【45.函数-生成器】
如果数据是有规律的,就可以先生成一个数据,等数据执行的时候再执行,也就是在真正调用数据之前,拿到数据的生成规律,而是拿到生成数据的公式,每取一次加一个容器。
这样的好处就是可以不浪费内存空间。
generator
a2 = (i for i in range(1000))
#只是一个算法,还没有创建
next(a2)
#这就是生成了一个元素,可以一直接着生成
生成器只能往后生成,不能往前调用
【46.函数-斐波那契】
a3 = (i for i in range(5))#这样的循环方式不会报错for具有检测报错机制,while 循环会报错
python2里的range是直接生成列表,如果range的数据很大的话,列表生成就会很慢,但是python3的range就是一个公式,还没有创建;python2里的xrange才会和python3里的range相同。
如果推算的公式比较复杂,那么列表生成式是不行的,因为它只支持三元运算
复杂的算法可以使用函数,比如斐波那契数列
斐波那契数列:除了第一个和第二个数外,任意一个数都可以由前两个数相加得到
1,1,2,3,5,8,13,21,34...
def fib(max):
    n,a,b = 0,0,1
    while n <max:
        print(b)
        a,b = b,a+b
        n = n+1
    return 'done'
 
-----------------------
def fib(max):
    n,a,b = 0,0,1
    while n <max:
        yield b #
        a,b = b,a+b
        n = n+1
       return 'done'
f = fib(18)
for i in f:
    print(i)
输出结果
yield 冻结当前的代码,把函数的执行过程冻结在这里,并且把值返回
好处:可以把函数的每一个值都可以返回出来,有了生成器yield以后,就有数据返回给外部了
函数里有yield,函数内部的代码就不再执行,只是生成一个生成器对象
【47.函数-生成器调用】
生成生成器以后一般是不用next的方法的直接用循环取取值比较好
for循环和while循环的区别:
1.for循环不会报错;2.for循环的时候可以不用next语法
正常情况下就会使用for循环
python3里的range底层也是一个生成器,可以节省内存
python2里的xrange==python3里的range是一样的,都是生成器
【48.函数-函数写生成器】
生成器的创建方式
1.列表生成式(只能用三元运算符进行简单的运算)
2.函数
自己实现一个range
def range2(n):
    count = 0
    while count <n:
        print(count)
        count += 1
        yield count
new = range2(10)
next(new)
next(new)
yield会暂停函数的执行,并返回当前执行的数据
yield会暂停函数的执行,并返回当前执行的数据
yield会暂停函数的执行,并返回当前执行的数据
重要的事情说3遍!!!
next会唤醒冻结的函数的执行过程,直到遇到下一个yield
总结:
1.生成器可以把函数执行的每一个步骤都通过yield返回出去(yield可以理解为暂停)
【49.函数-生成器send方法】
只要函数里有yield,就代表这个函数就转换为生成器了,
如果一个函数里既有yield又有return,是不能执行return的语句的,不能返回return的值,会报错,因为这个函数已经被转换成生成器了,这个生成器一旦执行结束,就不会再执行了,想再执行是不行的
send的作用
1.唤醒并继续执行生成器
2.发送一个信息到生成器内部
def range2(n):
    count = 0
    while count <n:
        print('count',count)
        count += 1
        sign = yield count
        if sign == 'stop':
            break
new = range2(10)
n1 = next(new)
new.send('stop')
yield是返回值,等待下一次执行
next其实就是和send原理一样,只不过是默认发送了一个None,但是send就可以发送任何需要的值了
【50.函数-迭代器】
可以直接用于for循环的数据类型有以下几种:
1.集合数据类型,如list、tuple、dict、set、str等
2.generator,包括生成器和带yield的generator function
这些可以作用域for循环的对象统称为可迭代对象:Iterable
一般情况下可以使用isinstance()判断一个对象是否是迭代器对象
而生成器不但可以作用于for循环,还可以被next()不断调用并返回下一个值,直到最后抛出异常,表示无法继续返回下一值
注意:可以被next()函数调用并不断返回下一值的对象称为迭代器
生成器都是迭代器,都是列表、字典、字符串虽然都是迭代对象,但是都不是迭代器,因为不能使用next()方法,但是可以使用iter()函数将它们变成迭代器
迭代器就是一个数据流,生成迭代器的时候不需要规定终止点,没有终止也不需要终止条件,这样的就表示为数据流。
这是因为Python的Iterator对象表示的是一个数据流,iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个序列,所以Iterator的计算是惰性的,只有在需要返回下一个数据时才回去计算。
总结:
凡是可以作用for循环的对象都是Iterator类型;
生成器一定是迭代器,迭代器不一定是生成器(可以自己写对象)
 
 
 
 
 
 
 
 
 
 
 
 

路飞学城Python-Day12的更多相关文章

  1. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  2. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  3. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  4. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  5. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  8. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  9. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

  10. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

随机推荐

  1. Hibernate框架学习(九)——Criteria语法

    一.语法 1.基本查询 2.条件查询 3.分页查询 4.排序查询 5.统计查询 二.离线查询 1.非离线的Criteria 2.离线的Criteria 3.演示 public class Demo2 ...

  2. DB2查看表空间和增加表空间容量

    Db2 connect to xxx Db2 “LIST TABLESPACES SHOW DETAIL” Tablespace ID = 7 Name = TSASNAA Type = Databa ...

  3. BZOJ2194: 快速傅立叶之二 FFT_卷积

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  4. (3)pyspark----dataframe观察

    1.读取: sparkDF = spark.read.csv(path) sparkDF = spark.read.text(path) 2.打印: sparkDF.show()[这是pandas中没 ...

  5. IOS - PDF合并

    #pragma mark - Merge PDF - (void)mergePDF { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSD ...

  6. sdoi2013 spring(hash+容斥)

    大体思路是先求出来\(f[i]\)代表有至少\(i\)个位置相同的点对数. 然后就已经没什么好害怕的了(跟BZOJ3622一样) 然后这个\(f[i\)]怎么求呢? 最无脑的方法就是枚举位置,然后\( ...

  7. vi 编辑器的日常使用

    命令行模式: 光标管理 text  屏幕 行 单词 gg 跳转到文档头部 H 跳转到屏幕首行 ^  或 数字0 跳转到行首 w 向前 G 跳转到文档尾部 M 跳转到屏幕中行 $ 跳转到行尾 b 向后 ...

  8. Numpy的使用规则

    之前安装的python版本是3.7 各种库都是自己一个一个下载安装的 很操心 各种缺功能 后来发现了anaconda 啊 真是一个好东西 简单来说 它就是一个涵盖大部分常用库的python包 一次安装 ...

  9. NetApp 存储的常用概念普及

    NetApp 存储的常用概念和命令1. Volume 和qtree卷(volume)是filer 上的一个基本空间单位,它可以是基于aggr划出的灵活卷(flexvol),也可以是直接由物理盘组成的传 ...

  10. DelayQueue延时队列示例

    介绍: DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素.该队列的头部是延迟期满后保存时间最长的Delayed 元素. 使用场景: 缓存系统的设计,缓存中的对象,超过了空闲时间 ...