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. Android 数字四舍五入

    BigDecimal b = new BigDecimal(hour).setScale(1, BigDecimal.ROUND_HALF_UP); setScale(int newScale, in ...

  2. 第七章 Python之模块与包

    模块介绍 一个模块就是包含了一组功能的python文件(例如module.py,模块名是module),它从文件级别组织程序,更方便管理,这时我们不仅仅可以把这些文件当作脚本执行,还可以把他们当作模块 ...

  3. node——post提交新闻内容

    获取用户post提交的数据分多次提交,因为post提交数据的时候,数据量可能比较大,会要影响服务器中获取用户所以.提交的所有数据,就必须监听request事件.那么,什么时候才表示浏览器把所有数据提交 ...

  4. Sona && Little Elephant and Array && Little Elephant and Array && D-query && Powerful array && Fast Queries (莫队)

    vjudge上莫队专题 真的是要吐槽自己(自己的莫队手残写了2个bug) s=sqrt(n) 是元素的个数而不是询问的个数(之所以是sqrt(n)使得左端点每个块左端点的范围嘴都是sqrt(n)) 在 ...

  5. [置顶] 谷歌大牛 Jeff Dean 是如何成为互联网战神的

    谷歌大牛 Jeff Dean 是如何成为互联网战神的 原文链接: Will Oremus   翻译: 伯乐在线- Lex Lian 译文链接: http://blog.jobbole.com/4772 ...

  6. CSS布局总结(一)

    前言:今天是学校为期六周的实训第一天,实训课感觉很水,第一天讲的竟然是HTML...实训老师丢了一个静态页面给我们做.感觉很久没写过这种东西,突然觉得自己的基本功很渣.布局这方面感觉需要总结一下,然后 ...

  7. Windows Vista 安装和使用指导 - 停止支持后的几条建议

    简介 曾经被广大网民吐槽的Windows Vista现在已经淡出了人们的视线,但仍有一些朋友想要体验一下这个操作系统.Windows Vista是Windows发展路线上的里程碑,相比之前的Windo ...

  8. ansible shell模块

    [root@ftp:/root] > ansible ansible01 -u root -k -m shell -a 'hostname' SSH password: ansible01 | ...

  9. PHP下的异步尝试二:初识协程

    PHP下的异步尝试系列 如果你还不太了解PHP下的生成器,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify ...

  10. swoole 清除定时器提示no timer

    首页确定一个核心概念 clearTimer仅可清除当前进程的定时器 server代码如下: <?php class Server { private $serv; private $timer; ...