day4 使用yield实现单线程】的更多相关文章

一.yield生成器(yield) yield用来结束while循环,并且能够保持之前循环的状态,下一次调用的时候直接从yield开始执行,执行yield后面的程序,并且重新进行循环:另外,yield还可用来接收参数,接收send()传递来的参数,并赋给一个变量. import time #导入time模块,用于给生产者生成包子定义时间,比如银行处理完成之后告诉用户信息 def consumer(name): #消费者模块 print("准备吃包子了!....") while True…
首先了解一个斐波那契函数的实现,了解下生成器的工作流程 # coding=utf-8 # Author: RyAn Bi def fib(max): n,a,b=0,0,1 while n < max: #print(b) yield b #定义一个生成器,也是个断点,每次运行都会再此调用 a,b = b,b+a n = n +1 return 'done' f=fib(2) while True: try: #定义一个异常处理 x= next(f) #运行下一步 print('f:',x) e…
一.协程: 1.生成器只有在调用时才会生成相应的数据 2.调用方式有 " str__next__.()   str.send() ", 3.并且每调用一次就产生一个值调用到最后一个值后会报错 4.报错可用try和except做异常处理   注意: next:是直接调用yield,并不会传值. send:是调用并直接传值给yield. #!/usr/bin/env python # -*- coding:utf8 -*- # Author:Dong Ye ''' 定义两个模型: 一个是生…
python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 2.装饰器 1.基本装饰器 2.多参数装饰器 3.递归 4.算法基础:二分查找 二维数组转换 5.正则表达式 6.常用模块学习 7.作业 1.迭代器&生成器 1)迭代器 定义: 就是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 优点: 不需要事先准备好整…
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 普通青年版 >>> a = [] >>> for x in range(10): a.append(x) ... >>>…
生成器 迭代器 装饰器 模块   来个需求,一个列表中所有元素都+1 1.最容易想到的方法 for循环,找列表索引,对应每个值+1 list_old = [1,2,3,4,5,6,7,8,9] for index,i in enumerate(list_old): list_old[index]+=1 print(list_old) 2.用上节课讲的匿名函数试试,也可以 a = map(lambda x:x+1,list_old) for i in a: print(i) 3.列表生成 a =…
Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而在这之前或者之后,元素可以不存在或被销毁. 特点: 访问者是不需要关心迭代器内部的结构,仅需要通过next()方法不断去取下一个内容. 不能随机访问集合中的某个值,只能从头到尾依次访问. 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 names = iter(['alex','jack…
笔者QQ 360212316 迭代器&生成器 生成器: 一个函数调用返回一个迭代器,那这个函数叫做生成器,如果函数中包含yield语法,那么这个函数就会变成生成器 生成器的特点: 1.生成器必须从前往后一次访问,不能跳着取 2.生成器只记录访问的数据,其他数据释放 3.生成器的作用就是预想可能用到那么多的数据 生成器的两种方式: 方式一: data = (x * 2 for x in range(5)) # 获取结果的两种方式 print(data.__next__()) print(next(…
1.上节内容回顾 递归: 明确的结束条件 问题规模每递归一次都应该比上一次的问题规模有所减少 效率低 高阶函数 文件: rb.wb.ab 一般用在不同系统之间传数据,和传视频流的时候用到,一般以这种形式打开的需要制定encoding='utf-8'的字符编码形式 其他: f.seek() f.tell() f.truncate() f.flush() 2.装饰器 定义:装饰器本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原则: 不能修改被装饰的函数的源代码 不能修改被装饰的函数的调用方…
装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能        原则:        1.不能修改被装饰的函数的源代码.        2.不能修改被装饰的函数的调用方式. def test(): print('test') print(test ) #表示是函数 test() #表示执行foo函数 <function test at 0x00595660>#表示的是函数的内存地址test#函数test执行结果 简单的装饰器: def…
迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问…
列表生成式 需求:列表[0,1,2,3,4,5,6,7,8,9]每个值加1,如何实现? 方法1:列表追加 >>> a = [0,1,2,3,4,5,6,7,8,9] >>> b = [] >>> for i in range(10): ... b.append(i+1) ... >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> a = b >>> a [1, 2,…
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件. 特点: a)访问者不需要关心迭代器内部的结构,仅需通过next()方法或不断去取下一个内容…
一.列表生成式 先有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,怎么实现? 方法一: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [] for i in a:b.append(i+1) a = b print(a) 此方法内存中会同时有两份列表,因此不适合处理大规模数据. 方法二: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for index,i in enumerate(a): a[…
目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通过yield来实现 61.6.函数定义中包含yield关键字==generator生成器 81.7.通过yield实现单线程并发运算效果 92.迭代器 102.1.迭代器的定义 102.2.inter()函数-将列表.字典.字符串转换成迭代器 112.3.小结 123.装饰器 123.1.装饰器-最初需求…
一.引子 (超哥协程) 并发本质:保存状态+切换 cpu正在运行一个任务,转而执行另一个任务的情概况:1.是该任务发生了阻塞:2.该任务计算的时间过长或有一个优先级更高的程序替代了它. 协程本质上就是一个线程,使用代码来控制任务的切换.以前线程任务的切换是由操作系统控制的,遇到I/O自动切换,现在我们用协程的目的就是较少操作系统切换的开销(开关线程,创建寄存器.堆栈等,在他们之间进行切换等),在我们自己的程序里面来控制任务的切换. ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单…
协程 引子 协程介绍 Greenlet Gevent介绍 Gevent之应用举例 一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制), 一种情况是该任务发生了阻塞, 另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它 PS:进程的三种执行状态:运行-阻塞-就绪,线程才是执行单位,所以线程执行状…
1.装饰器 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器的知识储备: 1.      函数即“变量” 2.      高阶函数           a.      把一个函数名当做实参传给另一个函数(在不修改被装饰函数源代码的情况下为期添加功能)           b.      返回值中包含函数名(不修改函数的调用方式) 3.      嵌套函数 4.      高阶函数+嵌套函数=装饰器…
引言 是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用途. abs() #求取绝对值,例子. a = -5 abs(a)#求绝对值 all() #迭代对象全为真,则返回Ture,否则返回False,例子. all([1,5,6])#True all([5,0,6])#False any() #与all类似,但是有真则返回Ture,全假返回False,例…
装饰器 本质是函数,装饰其他函数,为其他函数添加附加功能 原则: 1不修改原函数的源代码 2不修改原函数的调用方式 知识储备: 1函数即变量 使用门牌号的例子说明函数,调用方式与变量一致 2高阶函数 bar() bar(内存地址门牌号,指针) 例子:在不修改源码的情况下附加功能,把一个函数当做实参传给另一个函数,返回值中包含函数名 3嵌套函数 在函数体中定义新函数,注意调用方式与作用域 利用高阶函数和嵌套函数实现装饰器的效果 几种情况,从简单到复杂: 被装饰函数无参数 被装饰函数多参数 被装饰函…
GIL解释器锁 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全. 可以肯定的一点是:保…
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 创建一个…
迭代器 迭代器是访问集合元素的一种方式.从对象第一个元素开始访问,直到所有的元素被访问结束.迭代器只能往前,不能往后退.迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调用该方法可以返回一个元素. 迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.适合遍历一些巨大的或是无限的集合. 特点: 1 访问者不需要关心迭代器内部的结构,仅需要通过next()方法去获取下一个内容 2 不能随机访问集合中的某个值,只能从头到尾访问 3 访问到一半时不能回退 4 便于循…
1.1 装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实现装饰器知识储备: 1)函数即“变量” 2)高阶函数 3)嵌套函数 高阶函数+潜逃函数=>装饰器 2.使用高阶函数模仿装饰器功能 1)定义:把一个函数名当做实参传给另一个函数 2)返回值中包含函数名 3)下面使用高阶函数虽然可以实现装饰器的一些功能,但是违反了装饰器不能改变调用方式的原则,…
装饰器 1.什么是装饰器 装饰器本质是函数,用来给其他函数添加新的功能 特点:不修改调用方式.不修改源代码 2.装饰器的作用 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 装饰器必须准寻得原则: 不能修改被装饰函数的源代码.不能修改被装饰函数的调用方式 实现装饰器知识储备: 1.函数即“变量” 2.高阶函数 3.嵌套函数 高阶函数+潜逃函数=>装饰器 3.使用高阶函数模仿装饰器功能 1.定义:把一个函数名当做实参传给另一个函数 2.返回值中包含函数名 3.下面使用高阶函数虽然…
装饰器 1.装饰器的作用 1. 装饰器作用:本质是函数(装饰其他函数)就是为其他函数添加其他功能 2. 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 3.实现装饰器知识储备: 1)函数即“变量” 2)高阶函数 3)嵌套函数 高阶函数+潜逃函数=>装饰器 2.使用高阶函数模仿装饰器功能 1)定义:把一个函数名当做实参传给另一个函数 2)返回值中包含函数名 3)下面使用高阶函数虽然可以实现装饰器的一些功能,但是违反了装饰器不能改变调用方式的原则,    …
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件. 特点: a)访问者不需要关心迭代器内部的结构,仅需通过next()方法或不断去取下一个内容…
转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从理论+程序调试验证的方式详细讲解这部分知识,话不多说,直接进入主题. 一.迭代器(Iterater):     首先介绍迭代器,迭代器是访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.是不是觉得跟for循环很像?但是迭代器有几个特性需记住:    1.访问者…
内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一个假就是假,判断假的条件--> 假: 0,None, 以及空值(“”(空字符串), [], (), {}),都为假,其他都为真 # all(iterable), iterable -- 元组或列表. a = None b = [] c = {} d = () e = "" e1 =…
Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >&g…