宁夏自治区建设厅官方网站,个人网站模板下载,长沙棋牌软件制作开发,wordpress改大描述符#xff1a;将某种特殊类型的类的实例指派给另一个类的属性。 此处特殊类型的要求#xff0c;至少实现”__set__(self , instance , owner)“、”__get__(self , instance , value)“、”__delete__(self , instance )“三个方法中的一个。 class MyDecri… 描述符将某种特殊类型的类的实例指派给另一个类的属性。 此处特殊类型的要求至少实现”__set__(self , instance , owner)“、”__get__(self , instance , value)“、”__delete__(self , instance )“三个方法中的一个。 class MyDecriptor:def __get__(self,instance,owner):print(getting...,self,instance,owner)def __set__(self,instacne,owner):print(setting...,self,instance,owner)def __delete__(self,instace):print(deleting...,self,instance) class Test:x MyDecriptor()
test.x
getting... __main__.MyDecriptor object at 0x00000212DA0936D8 __main__.Test object at 0x00000212DA0EABE0 class __main__.Testtest.x X-man
setting... __main__.MyDecriptor object at 0x00000223972236D8 __main__.Test object at 0x00000223972234E0 X-mandel test.x
deleting... __main__.MyDecriptor object at 0x00000223972236D8 __main__.Test object at 0x00000223972234E0test.x访问属性时调用__get__方法从结果可以看出调用时传入的三个参数依次为 __main__.MyDecriptor object at 0x00000212DA0936D8即描述符类本身的实例第二个__main__.Test object at 0x00000212DA0EABE0Test类的实例 第三个 class __main__.Test类本身。 另外 __set__、__delete__与之相类似。 2、迭代器 a、定义提供迭代方法的容器称为迭代器序列、字典、文件等都是迭代器它们都支持迭代操作。 for i in Fishc:print(i)
F
i
s
h
c 此处 for语句的作用是触发迭代器的迭代功能每次从容器中取出一个数据。 b、关于迭代操作python提供了两个相关的 BIF、iter()、next()。对于一个容器对象调用iter()就得到它的迭代器调用next迭代器就会返回下一个值直到迭代器没有值可以返回就抛出StopItration异常。 string Fishcs iter(string)next(s)
Fnext(s)
inext(s)
snext(s)
hnext(s)
cnext(s)
Traceback (most recent call last):File pyshell#13, line 1, in modulenext(s)
StopIteration c、关于迭代器的魔法方法iter()的实现 ” __iter__()“、next()的实现” __next__()“下面斐波拉契数列的例子。 class Fibs:def __init__(self,n 10):self.a 0self.b 1self.n ndef __iter__(self):return selfdef __next__(self):self.a , self.b self.b ,self.a self.bif self.a self.n:raise StopIterationreturn self.a fibs Fibs()for each in fibs:print(each)1
1
2
3
5
8fibs Fibs(100)for each in fibs:print(each)1
1
2
3
5
8
13
21
34
55
89 4、生成器生成器实际上是一个特殊的迭代器。 a、协同程序可以运行的独立函数调用函数可以暂停或者挂起在需要的时候从程序离开的地方继续运行或重新开始。 b、一旦一个函数中存在 yield 这个函数就成了一个生成器。 c、生成器的关键字yield每当遇到yield会将后面的内容会返回并暂停采用next()继续。 def Fibs():a 0b 1while True:a,b b,abyield a c Fibs()next(c)
1next(c)
1next(c)
2next(c)
3next(c)
5 for each in c:if each 100:breakprint(each,end )8 13 21 34 55 89 type(c)
class generator转载于:https://www.cnblogs.com/Chris-01/p/11235450.html