商贸行业网站建设公司,泉州厦门网站建设公司,WordPress考勤模板,淘宝网站的建设情况生成器与迭代器 生成器生成器定义为什么要有生成器创建生成器的方式一(生成器表达式) 创建生成器的方式二(生成器函数)生成器函数的工作原理总结 迭代器概念可迭代对象和迭代器区别for循环的本质创建一个迭代器 动态添加属性和方法运行过程中给对象、类添加属性和方法types.Met… 生成器与迭代器 生成器生成器定义为什么要有生成器创建生成器的方式一(生成器表达式) 创建生成器的方式二(生成器函数)生成器函数的工作原理总结 迭代器概念可迭代对象和迭代器区别for循环的本质创建一个迭代器 动态添加属性和方法运行过程中给对象、类添加属性和方法types.MethonType的使用给类动态添加静态方法以及类方法 __slots__ 的作用 生成器 生成器定义
在Python中一边循环一边计算的机制称为生成器generator
为什么要有生成器
列表所有数据都在内存中如果有海量数据的话将会非常耗内存。 如仅仅需要访问前面几个元素那后面绝大多数元素占用的空间 都白白浪费了。 如果列表元素按照某种算法推算出来那我们就可以在循环的过程 中不断推算出后续的元素这样就不必创建完整的list从而节省大 量的空间。
简单说 时间换空间想要得到庞大的数据又想让它占用空间少那就用生成器 延迟计算需要的时候再计算出数据
创建生成器的方式一(生成器表达式)
生成器表达式很简单只要把一个列表推导式的 [] 改成 () 就创建 了一个生成器(generator)
L [x * x for x in range(10)]
print(L)
g (x * x for x in range(10))
print(g)[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] generator object at 0x1006e8520 创建 L 和 g 的区别仅在于最外层的 [] 和 () L 是一个list而 g 是一个 generator。
创建生成器的方式二(生成器函数)
生成器函数
如果一个函数中包含 yield 关键字那么这个函数就不再是一个普通函数调用函数就是创建了一个生成器generator对象。生成器函数其实就是利用关键字 yield 一次性返回一个结果阻塞重新开始。
生成器函数的工作原理 生成器函数返回一个迭代器for循环对这个迭代器不断调用 next() 函数不断运行到下一个 yield 语句一次一次取得每一个返回值直到没有 yield 语句为止最终引发 StopIteration 异 常。 yield 相当于 return 返回一个值并且记住这个返回的位置下次迭代时代码从 yield 的下一条 语句(不是下一行)开始执行。 send() 和 next() 一样都能让生成器继续往下走一步下次遇到 yield 停但 send() 能传一个 值这个值作为 yield 表达式整体的结果 #codingutf-81. 函数有了yield之后调用它就会生成一个生成器
2. yield作用程序挂起返回相应的值。下次从下一个语
句开始执行。
3. return在生成器中代表生成器种植直接报错
StopIeratation
4. next方法作用唤醒并继续执行
def test():print(start)i0while i3:temp yield i #下次迭代时代码从yield的下一条语句(不是下一行)开始执行print(ftemp:{temp})i 1print(end)return doneif __name__ __main__:a test()print(type(a))print(a.__next__())print(a.__next__())print(a.__next__()) # next(a) 一样print(a.__next__()) # 抛出异常StopIteration总结
什么是生成器 生成器仅仅保存了一套生成数值的算法并且没有让这个算 法现在就开始执行而是我什么时候调它它什么时候开始 计算一个新的值并给你返回。
迭代器 概念
1 迭代是Python最强大的功能之一是访问集合元素的一种方式。 2 迭代器是一个可以记住遍历的位置的对象。 3 迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。 4 迭代器只能往前不会后退。 5 迭代器有两个基本的方法 iter() 和 next()
可迭代对象和迭代器区别
1 一个实现了 iter 方法的对象称为可迭代对象Ieratable 2 一个实现 next 方法并且是可迭代的对象称为迭代器Iterator 即实现了 iter 方法和 next 方法的对象就是迭代器。
⚠️生成器都是 Iterator 对象但 list 、 dict 、 str 虽然是 Iterable可迭代对 象 却不是 Iterator迭代器 。 为什么 list 、 dict 、 str 等数据类型不是 Iterator Python的 Iterator 对象表示的是一个数据流。可以把这个数据流看 做是一个有序序列但我们却不能提前知道序列的长度只能 不断通过 next() 函数实现按需计算下一个数据所以 Iterator 的计算 是惰性的只有在需要返回下一个数据时它才会计算。 所以生成器一定是迭代器。 Iterator 甚至可以表示一个无限大的数据流例如全体自然数。而 使用list是永远不可能存储全体自然数的。
for循环的本质
Python3的 for 循环本质上就是通过不断调用 next() 函数实现的。 本质是
# 首先获得Iterator对象:
it iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:# 获得下一个值:x next(it)
except StopIteration:# 遇到StopIteration就退出循环break创建一个迭代器
一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() __iter__() 方法返回一个特殊的迭代器对象 这个迭代器对象实现了 __next__() 方法并通过StopIteration 异常标识迭代的完成。 __next__() 方法会返回下一个迭代器对象。
class MyNumbers:def __iter__(self):self.num 10return selfdef __next__(self):if self.num40:x self.numself.num 10return xelse:raise StopIteration
myclass MyNumbers()
myiter iter(myclass)print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))动态添加属性和方法 动态编程语言是高级程序设计语言的一个类别在计算机科学领域 已被广泛应用。 它是指在运行时可以改变其结构的语言 例如新的函数、 对象、甚 至代码可以被引进 已有的函数可以被删除或是其他结构上的变化。
运行过程中给对象、类添加属性和方法
#codingutf-8
import types
class Person():def __init__(self,name,age):self.name nameself.age age
p1 Person(zhangsan,20)
p2 Person(lisi,30)
#动态给对象添加属性和方法
p1.score 100
print(p1.score)def run(self):print(f{self.name},running...)
#动态的对象添加方法
p1.run types.MethodType(run,p1)
p1.run()types.MethonType的使用
p1.run types.MethodType(run,p1)
# 即使换成
xxx types.MethodType(run,p1)
# xxx()调用一样还用
# 因为之前提示缺少参数主要是不知道self到底是谁
# 而types.MethodType(run,p1)则是告诉解释器self
指的就是p1给类动态添加静态方法以及类方法
staticmethod
def staticfunc():print(---static method---)
Person.staticfunc staticfunc
Person.staticfunc()classmethod
def clsfunc(cls):print(---cls method---)
Person.clsfunc clsfunc
Person.clsfunc()slots 的作用
__slots__ 对动态添加成员变量、成员方法有限制。对动态添加类属性、类方法没有限制。 __slots__ 只对本类有限制不限制子类
class Person():__slots__ {name,age}def __init__(self,name,age):self.name nameself.age agedef eat(self):print(人是铁饭是钢要吃)
if __name__ __main__:p1 Person(gaoqi,18)
# p1.gender man #AttributeError:
Person object has no attribute gender
文章转载自: http://www.morning.ngcw.cn.gov.cn.ngcw.cn http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.sqxr.cn.gov.cn.sqxr.cn http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn http://www.morning.pznhn.cn.gov.cn.pznhn.cn http://www.morning.lwrks.cn.gov.cn.lwrks.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.fsfz.cn.gov.cn.fsfz.cn http://www.morning.ywpwg.cn.gov.cn.ywpwg.cn http://www.morning.ptlwt.cn.gov.cn.ptlwt.cn http://www.morning.c7496.cn.gov.cn.c7496.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.cklgf.cn.gov.cn.cklgf.cn http://www.morning.kqblk.cn.gov.cn.kqblk.cn http://www.morning.nmkfy.cn.gov.cn.nmkfy.cn http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.kyytt.cn.gov.cn.kyytt.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.huarma.com.gov.cn.huarma.com http://www.morning.grbp.cn.gov.cn.grbp.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.kxrld.cn.gov.cn.kxrld.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.dpbgw.cn.gov.cn.dpbgw.cn http://www.morning.lqynj.cn.gov.cn.lqynj.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.flhnd.cn.gov.cn.flhnd.cn http://www.morning.rqdx.cn.gov.cn.rqdx.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.hjwxm.cn.gov.cn.hjwxm.cn http://www.morning.rysmn.cn.gov.cn.rysmn.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.mtgkq.cn.gov.cn.mtgkq.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.dwtdn.cn.gov.cn.dwtdn.cn http://www.morning.qcsbs.cn.gov.cn.qcsbs.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.jqllx.cn.gov.cn.jqllx.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.qlpq.cn.gov.cn.qlpq.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.qtwd.cn.gov.cn.qtwd.cn http://www.morning.krtcjc.cn.gov.cn.krtcjc.cn http://www.morning.qkdbz.cn.gov.cn.qkdbz.cn http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.cxryx.cn.gov.cn.cxryx.cn http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn http://www.morning.wxccm.cn.gov.cn.wxccm.cn http://www.morning.bsjxh.cn.gov.cn.bsjxh.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.mrgby.cn.gov.cn.mrgby.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.jmtrq.cn.gov.cn.jmtrq.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn http://www.morning.xlwpz.cn.gov.cn.xlwpz.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.dxhdn.cn.gov.cn.dxhdn.cn http://www.morning.xymkm.cn.gov.cn.xymkm.cn http://www.morning.pctsq.cn.gov.cn.pctsq.cn http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.bbgr.cn.gov.cn.bbgr.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn