1.yield的表达式形式应用的定义: 在一个生成器函数内,将yield赋值给一个变量,这就是yield的表达式形式.也叫生成器的表达式形式 2.send方法的定义: (1)定义: yield的表达式形式下面有一个send方法,它的作用与next方法是一样的,都是在触发函数继续往下走.除了具有next的功能外,还具有传值的效果.send传值的方式是先把要传的值交给yield,再由yield赋值给事先定义的变量名,最后才触发next效果. def foo(): print('start') whi…
yield的功能: 1. 与return类似,都可以返回值,不一样在于,yield可以返回多个值而且可暂停,再次执行可继续下一步操作,return到了就停止不在继续运行. 2.为封装好的的函数能够使用__iter__和__next__方法, 3.遵循迭代器的取值方式 .__next__(),触发函数的执行和函数的保存都是通过yeild保存的.  .   一:yield的表达式形式 def foo(): print('starting') while True: x=yield #yield的表达…
一.yield的表达形式 def foo(): print('starting') while True: x=yield None#return 2 print('value :',x) g=foo() print(next(g)) print(g.send(2)) 运行结果: starting #运行函数,打印starting后碰到yield停住 None #next()触发后 yield将None赋值给x,打印None后循环碰到yield停住 value : 2 #g.send(2)将2赋…
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield None print('value',x) g=foo() print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None print('---分割线君---') print(g.send(1)) #传值给yield,然后yield传给x,最后触发一次next…
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为x=yield None 6 print('value',x) 7 g=foo() 8 print(g.__next__()) #停到yield位置,生成器初始化,遇到yield返回一个None 9 print('---分割线君---') 10 print(g.send(1)) #传值给yield,…
先来看一个例子 def foo(): print("starting...") while True: res = yield print("res:",res) g = foo() next(g) 在上面的例子里,因为foo函数中有yield关键字,所以foo()函数的执行结果g是一个生成器,此时可以使用next(g)或者g.__next__()方法触发生成器的执行 程序的执行结果为 starting... 使用next(g)触发生成器的执行时,程序会按照正常的顺…
一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper @init def eater(name): print('%s ready to eat'%name) list=[] while True: food=yield list list.append(food) print(…
我们已知: 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器 yield的功能: 1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值 2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器 3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的 yield的表达式: x = yield 将yield的值传给x,那么yield的值…
Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次next:包含一个元组,元组中有三个元素,(路径,路径包含的所有文件夹,路径包含的所有文件) 第二次next:包含一个元组,元组中有三个元素,(上面第二个元素中的第一个路径,前面那个路径包含的所有文件夹,前面那个路径包含的所有文件) 1.x = yield #yield的表达式的应用,可以通过 yield 向…
一. 函数对象 1. 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.返回值 return的返回值没有类型限制 1. 没有return:返回None,等同于return None 2. return 一个值:返回该值 3. return val1,val2,val3:返回(val1,val2,val3) return跟多个值的时候,返回的是元组 返回值 def func(): print('from f…
首先了解 1.iterator iterator叫做迭代器,用来遍历可以序列化的数据,比如一个list,set 等,当然如果对象想要能够使用迭代器来遍历,只要在该对象的类中添加__iter__()方法,该方法返回一个迭代器对象,迭代器对象中需要实现next()方法 for example: >>> class sequenceClass(object):   ...     def __init__(self, *args):   ...             self._data =…
import random foods=['banana','apple','peach','grape','pear'] def deco(func): def wrapper(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return wrapper @deco def eater(name): print('%s ready to eat'%name) foods_list=[] while 1: food=yield f…
1:有如下几种原因: (1)inline定义的类的内联函数,函数的代码被放在符号表中,在使用时直接进行替换(像宏一样展开),没有了调用的开销,效率也很高. (2)类的内联函数也是一个真正的函数.编译器在调用一个内联函数时,首先会检查它的参数的类型,保证调用正确:然后进行一系列的相关检查,就像对待任何一个真正的函数一样.这样就消除了它的隐患和局限性. (3)inline可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员.…
yield的表达式形式 def init(func): def wrapper(*args, **kwargs): g = func(*args, **kwargs) next(g) return g return wrapper @init #foo=init(foo) def foo(): print('starting') while True: print('value : ', x) g = foo() #wrapper() g.send() 结果: starting value :…
一.装饰器 一.装饰器的知识储备 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**kwargs): #即args=(1,2,3,4,5),kwargs={'x':1,'y':3} index(*args,**kwargs) #index(1,2,3,4,5,y=2,x=5) 2.函数对象:被当做数据传递 1.函数可以当做参数传给另外一个函数 2.一个函数的返回值,也可以是一个函数(…
本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ============================================================ 一.什么是迭代 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭代的初始值. # 我们以前学习的while按照如下执…
协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了一种统一的迭代对象的方式,不依赖于索引 2.惰性计算 缺点: 1.无法获取迭代器的长度 2.一次性的,只能往后取值,不能往前退,不能像索引那样去取得某个位置的值 2.生成器:函数内带有yield关键字,那么这个函数执行的结果就是生成器 生成器的本质就是迭代…
一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了一种统一的迭代对象的方式,不依赖于索引 2.惰性计算 缺点: 1.无法获取迭代器的长度 2.一次性的,只能往后取值,不能往前退,不能像索引那样去取得某个位置的值 2.生成器:函数内带有yield关键字,那么这个函数执行的结果就是生成器 生成器的本质就是迭代器 def func(): n=0 whil…
今日内容:1.迭代器(****)2.生成器(***)3.生成器表达式(*****)4.面向过程编程(*****)5.包的使用(***)6.常用模块    logging (*****)    re (*****) 一.迭代器 1.什么是迭代器    迭代器就是迭代取值的工具    迭代是一个重复的过程,但是每一次重复都是基于上一次的结果而进行的2.为何要用迭代器    针对没有索引的数据类型,如:字典,集合,文件,要想迭代取出其中包含的一个个的值    python解释器必须提供一种能够不依赖于…
一.装饰器 一.装饰器的知识储备 不想修改函数的调用方式,但是还想在原来的函数前后添加功能 1.可变长参数  :*args和**kwargs def index(name,age): print(name,age) def wrapper(*args,**kwargs): #即args=(1,2,3,4,5),kwargs={'x':1,'y':3} index(*args,**kwargs) #index(1,2,3,4,5,y=2,x=5) 2.函数对象:被当做数据传递 1.函数可以当做参数…
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !important; } .markdown-body .headeranchor-link { position: absolute; top: 0; bottom: 0; left: 0; display: block; padding-right: 6px; padding-left: 30px; margi…
python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返回一个迭代器,所谓的迭代器就是具有next方法的对象.(在调用next方法时不需要任何参数).在调用next方法时,迭代器会返回它的下一个值.如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopITeration异常. 一个实现了__iter__方法的对象是可迭代的,一个实现了nex…
协程函数 面向过程编程 递归与二分法 内置函数   lambda 模块与包的使用 import from ... import ... 常用模块 ################################## 函数中只要有yield , 函数执行的结果就变成了一个生成器 他并不会马上执行 生成器本身就是一个迭代器,使用next() 触发函数的执行 yield功能 1.把函数的执行结果封装好__iter__和__next__,得到一个迭代器 2.与return功能类似,都可以返回值,但不同的…
1.迭代和递归等概念 循环(loop):指的是在满足条件的情况下,重复执行同一段代码.比如,while语句,for循环. 迭代(iterate):指的是按照某种顺序逐个访问列表中的每一项.比如,for语句.Python中,迭代永远是取出元素本身,而非元素的索引.对于有序集合,元素确实是有索引的.使用 enumerate() 函数获得索引. 递归(recursion):指的是一个函数不断调用自身的行为.比如,以编程方式输出著名的斐波纳契数列. 遍历(traversal):指的是按照一定的规则访问树…
函数是第一类对象:可以当做数据来传 1.  可以被引用 2.  可以作为函数参数 3.  可以作为函数返回值 4.  可以作为容器类型的元素 小例子: def func1(): print('func1') def func2(): print('func2') dic = { 'func1':func1, 'func2':func2, } func = dic.get('func1') func() 名称空间:名字与值的绑定关系,时刻记得左面有一根竖线,标识着作用域的不同 何时生效.何时失效,…
一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何用迭代器? 可迭代的对象:但凡内置有__iter__方法的对象都是可迭代的对象,列如str,list,dict,tuple,set,文件对象 迭代器对象:即内置有__iter__方法又内置有__next__方法的对象称之为迭代器对象,如文件对象 可迭代对象.__iter__()-------->迭代…
一.什么是迭代器: 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器是一个可以记住遍历的位置的对象. 迭代器的特点:只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 1.iter方法:返回迭代器对象本身 2.next方法:返回迭代器的下一个元素 可迭代的:只要对象本身有__iter__方法,那它就是可迭代的. 字符串,列表或元组对象都可用于创建迭代器: list = [1,2,3…
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 里面详细介绍过,这里不再赘述: 2.yield 的表达式形式: x=yield - 示例1:使用 next() 方法调用生成器执行,没有给yield传值: def deco(func): # 定义了一个装饰器 def wrapper(*args,**kwargs): res = func(*args…
Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y…
迭代器和生成器补充:http://www.cnblogs.com/luchuangao/p/6847081.html 一 递归和迭代 略 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如fo…