迭代器

浅谈abstractfactory抽象工厂模式

丶灬走出姿态 提交于 2019-11-30 13:04:47
一、前言 上次我们学习了Builder模式,用来组装复杂的实例,Builder就是我们盖房子的一块块砖头,钢筋和水泥,以及简单的用法,使用监工将这些元素有机的组合在了一起就能够建造整个建筑了,是监工将这些原材料按照一定的次序和特定的处理流程糅合在一起,这个过程就是组装。而现在我们学习了抽象工厂模式,将关键零件组装成产品。 在此之前,让我们对前面的几种模式做简单的回顾,首先我们学习了 迭代器模式 ,使用了工厂方法创造迭代器,并且完成了元素的内部实现和遍历的分离,因此成为“器”,也算是一种配合,其次我们学习了适配器,有类适配器和对象适配器,这两者只是实现的方式不同,本质是一样的,都是通过在原素材上加入一个适配器使得能够满足现在的需要,一般用在版本之间的兼容上使得新版本的内容能够在旧版本上使用(适配),以及一些复用的时候需要适当的修改(适配)的场合;之后我们学习了 模板模式和工厂模式 ,模板方法的一个特殊实现其实就是工厂方法,模板方法就是通过在父类之中定义职责,然后让子类实现各自的子任务,最后通过父类进行调用,提高了代码的可修改性和可扩展性,工厂方法则是在模板方法的基础上,通过生产产品的方式将框架的实现分离,遵循了高内聚低耦合的原则;在之后我们学习了 单例模式和原型模式 ,单例模式是保证全局关于某个类只有一个对象,在某些多线程或者编码误用的条件下非常重要,原型模式则是实现了对象的深浅拷贝

函数进阶(三) day14

主宰稳场 提交于 2019-11-30 12:20:42
目录 昨日内容 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式 列表推导式 字典生成式 zip 生成器表达式 生成器 yield 递归 今日内容 匿名函数 内置方法 掌握 了解 异常处理 assert 断言 raise 主动抛出错误 面向过程编程(思想) 昨日内容 迭代器 迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象 可迭代对象 含有 __iter__ 的方法的数据类型 除了数字类型都是可迭代对象 迭代器对象 含有 __iter__ 和 __next__ 方法的数据类型 只有文件是迭代器对象 可迭代对象加上 __iter__ 就是迭代器对象 for循环原理 lt = [1,2] lt_iter = lt.__iter__() while True: try: print(lt_iter.__next__()) except StopIteration as e: break 三元表达式 条件成立 if条件 else 条件不成立 列表推导式 [i for i in range(10)] 字典生成式 {i:i for i in range(10)} zip 把多个可迭代对象一次性读取每一个可迭代对象种的元素,拼成元素 生成器表达式 (i for i in range(10)) 节省空间 生成器 本质是迭代器,自定义迭代器,含有yield关键字的函数 def ge

迭代器与生成器

回眸只為那壹抹淺笑 提交于 2019-11-30 12:10:31
实现迭代器 要实现迭代器,只要实现如下两个方法即可: __iter__(self) :该方法返回一个迭代器( iterator ),迭代器必须包含一个 __next__() 方法,该方法返回迭代器的下一个元素。 __reversed__(self) :该方法主要为内建的 reversed() 反转函数提供支持,当程序调用 reversed() 函数对指定迭代器执行反转时,实际上是由该方法实现的。(如果不需要让迭代器反转迭代,这个方法也可以不用实现) 示例代码如下: # 定义一个斐波那契数列的迭代器 class Fibs ( object ) : def __init__ ( self , len ) : self . first = 0 self . sec = 1 self . __len = len def __next__ ( self ) : # 迭代器所需的__next__方法 if self . __len == 0 : raise StopIteration self . first , self . sec = self . sec , self . first + self . sec self . __len -= 1 return self . first def __iter__ ( self ) : # 定义__iter__方法,该方法返回迭代器

迭代器

╄→гoц情女王★ 提交于 2019-11-30 11:54:49
一.迭代器与可迭代对象的区别 1.可迭代对象是可以用for循环访问的 如:list,tuple,str,dict等。 irte将可迭代对象转为迭代器 2.迭代器 可以for循环和__next__()函数访问 二.迭代器与生成器 都能用__next__()和for循环访问,可以说他们基本上是等价的 唯一的区别是生成用dir()发现它有一个__irte__方法 来源: https://www.cnblogs.com/gjx1212/p/11582532.html

day24

送分小仙女□ 提交于 2019-11-30 11:30:41
目录 迭代器 迭代器对象 可迭代对象 迭代器对象 三元表达式 列表推导式 字典生成式 生成器生成式 生成器 yield的特性 return的特性 写一个range方法 递归 迭代器 迭代器并不是函数,只是一个称呼而已 python中一切皆对象(数据类型) 可迭代对象:含有 __iter__ 方法的数据类型就叫做可迭代对象 python中除了数字类型,多有数据类型都是可迭代对象 迭代器对象 迭代器对象就是含有 __iter__ 和 __next__ 方法的对象 为什么要有迭代器对象:提供了不依赖索引取值的手段 for循环原理(for循环本质就是一个while循环,只不过是一个一定可控的while循环) 可迭代对象 可迭代对象:含有 __iter__ 方法叫做可迭代对象--》除了数字类型都是可迭代对象--》可迭代对象使用 __iter__ 变成迭代器 迭代器对象 迭代器对象:含有 __iter__ 和 __next__ 方法叫做迭代器对象--》只有文件时迭代器对象--》迭代器使用 __iter__ 依然是迭代器 可迭代对象不一定是迭代器对象;迭代器对象一定是可迭代对象。 三元表达式 顾名思义就是只能赚三块钱的表达式 这只是程序员装逼用的代码,实际上不大会使用 x=10 y=20 print(x) if x>y else print(y) 如果条件成立则走这里

迭代器,生成器和递归

邮差的信 提交于 2019-11-30 11:29:07
迭代器和生成器 可迭代对象 具有 __iter__ 方法的对象,就是可迭代对象。 可迭代对象返回的值是一个具有 __next__ 方法的对象叫迭代器对象 In [2]: a = [1,2] In [3]: it = a.__iter__() In [4]: it Out[4]: <list_iterator at 0x1e69be013c8> In [5]: it.__next__() Out[5]: 1 可迭代对象有:str, list, tuple, dict, set, file 迭代器对象返回的还是迭代器对象,具有`__next__`方法 In [5]: it.__next__() Out[5]: 1 In [6]: it Out[6]: <list_iterator at 0x1e69be013c8> In [7]: for i in it: ...: print(i) ...: 2 In [8]: it2 = it.__iter__() In [9]: it2 Out[9]: <list_iterator at 0x1e69be013c8> 三元表达式 In [11]: print(1) if 1<2 else print(2) 1 列表推导式 In [15]: b = (i for i in range(8)) In [16]: b Out[16]:

9.24 总结

末鹿安然 提交于 2019-11-30 11:05:41
1.迭代器: 不是函数,只是一个称呼,Python中一切皆对象,可迭代对象:含有 .__iter__ 方法的数据类型叫做可迭代对象 x=10 #不是可迭代对象 s='abc' s.__iter__() lt=[1,2,3] lt.__iter__() tup=(1,) tup.__iter__() dic={'a':1} dic.__iter__() fa=open('test.txt','a+',encoding='utf8') fa.seek(0,0) fa.__iter__() 除了数字类型,所有数据类型都是可迭代对象 s='abc' s_iter=s.__iter__() print(s_iter.__next__()) #s[0] print(s_iter.__next__()) #s[1] print(s_iter.__next__()) #s[2] dic = {'a': 1, 'b': 2, 'c': 3} dic_iter=dic.__iter__() print(dic_iter.__next__()) # 迭代取值 --》 基于上一个值 print(dic_iter.__next__()) print(dic_iter.__next__()) #c 2.迭代器对象: 含有 .__iter__和.__next__ 方法的对象,可迭代对象使用 .__iter__

day13

帅比萌擦擦* 提交于 2019-11-30 11:01:10
1. 迭代器 迭代器:他不是函数,只是一个称呼。 python中一切皆是对象(数据类型) 可迭代对象:含有 .__ iter __方法的数据类型就叫做可迭代对象。 除了数字类型,所有数据类型都是可迭代对象。可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。 特点: 内置有 __iter__ 方法的都叫可迭代的对象。 x = 10 #则不是可迭代对象 可迭代对象位 .__iter__ s = "adc" s.__iter__ lt = [1,2,3] lt.__iter__ tup = (1,) tup.__iter__() se = {1} se.__iter__() dic ={"a":1} dic.__iter__() fw = open("text","a+",encoding="utf-8") fw.seek(0,0) fw.__iter__() # 除了数字类型,所有数据类型都是可迭代对象 迭代器对象 迭代器对象:含有 .__ iter __ 和 .__ next __方法的对象就是迭代器对象。 概念:可迭代的对象执行 __iter__ 方法得到的返回值。并且可迭代对象会有一个 __next__ 方法。 只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的

Day 13 迭代器/生成器/列表推导式/字典生成式/递归

一个人想着一个人 提交于 2019-11-30 10:59:09
目录 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式 列表推导式 字典生成式 zip()方法 生成器 yield关键字 迭代器套迭代器 递归 直接调用 间接调用 如何使用递归 二分法查找 迭代器 可迭代对象 内置有 __iter__ 方法的都叫做可迭代对象,数字类型没有 __iter__ 方法 name = 'tiny'.__iter__ lis = [1, 2].__iter__ dic = {'name': 'tiny', 'age': 18}.__iter__ tup = (1, 2).__iter__ se = {'a', 'b'}.__iter__ fa = open('test.txt', 'a+', encoding='utf8') fa.__iter__ 迭代器对象 可迭代对象执行 __iter__ 方法所得到的返回值就是迭代器对象 只有文件本身是迭代器对象 dic = {'name': 'tiny', 'age': 18} dic_iter = dic.__iter__ print(dic_iter.__next__) print(dic_iter.__next__) name age for循环原理 for循环称为迭代器循环,in后必须是可迭代的对象。 因为迭代器使用 __iter__ 后还是迭代器本身

博客13

走远了吗. 提交于 2019-11-30 10:30:44
目录 函数的进阶二 isinstance 方法 1. 迭代器(不是函数,只是一个称呼而已) 1. 可迭代对象 2.迭代器对象 2. 三元表达式 3. 字典生成式 1. for 循环生成字典 2. zip() 方法生成字典 4. 列表推导式 5. 生成器 6.递归 函数的进阶二 isinstance 方法 lis = [1,2] print(isinstance(lis,Iterable)) # True print(isinstance(lis,list)) # True print(isinstance(rang(10),Iterable)) # True 1. 迭代器(不是函数,只是一个称呼而已) 1. 可迭代对象 什么叫可迭代对象: 只含有 .__iter__ 方法的数据类型就叫做可迭代对象 数据类型中除了数字类型之外,其他的都是可迭代对象 可迭代对象使用 __iter__,就可以让可迭代对象变成迭代器对象 dic = {'a': 1, 'b': 2, 'c': 3} dic1 = dic.__iter__() #将可迭代对象变成迭代器对象 #迭代取值: print(dic1.__next__()) # a print(dic1.__next__()) # b print(dic1.__next__()) # c # 载往下就会报错,因为已经将dic_iter 的值取完了