迭代器

Python 列表表达式 ,迭代器(1)

匿名 (未验证) 提交于 2019-12-02 22:56:40
python 环境 3.5 1 、列表: s = []; for i in s: i = handleFunction(i); s.append(i) 2 、列表 s =[handleFunction(i) for i in s] 或者 s =[handleFunction(str(i)) for i in s] // 转为字符串 3、不用for循环(for循环的替代)map eg: seq 只有只有一个参数时: map==for **将元组转换成list*** >>> list(map(int,(1,2,3))) [ 1, 2, 3] ***将字符串转换成list*** >>>list(map(int,‘1234‘)) [ 1, 2, 3, 4] ***提取字典的key,并将结果存放在一个list中*** >>> res=list(map(int,{"1":"a","2":"b"})) [ 1, 2 ] #将小写转成大写 def u_to_l (s): return s.upper() print list( map(u_to_l, ‘asdfd‘)) map ( function iterable ... ) function iterable iterable function 原文:https://www.cnblogs.com/cbugs/p/9271458.html

python问题

匿名 (未验证) 提交于 2019-12-02 22:56:40
修饰器是什么? 有种设计模式叫修饰器模式, 它可以在不修改目标函数代码的前提下, 在目标函数执行前后增加一些额外功能 迭代器? 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。 迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [迭代器的优点]: 使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。 生成器? 延迟操作。也就是在需要的时候才产生结果,不是立即产生结果。 >生成器是只能遍历一次的。 >生成器是一类特殊的迭代器。 yield 元类? 元类就是那个帮你创建类的"家伙"。 为了创建对象(实体),你定义了类,是不是? 而在python中,类也是对象,这样的对象就是通过元类来创建的。 元类就是"类的类"。 上文中提到的type事实上就是一个元类,在python中,所有的类都是使用type创建的 原文:https://www.cnblogs.com/jiaoyang77/p/9248963.html

Python 中的迭代器和生成器

匿名 (未验证) 提交于 2019-12-02 22:54:36
迭代器 每次可以返回一个对象元素的对象,例如返回一个列表。我们到目前为止使用的很多内置函数(例如 enumerate)都会返回一个迭代器。 是一种表示数据流的对象。这与列表不同,列表是可迭代对象,但不是迭代器,因为它不是数据流。 生成器 是使用函数创建迭代器的简单方式。也可以使用类定义迭代器 下面是一个叫做 my_range 的生成器函数,它会生成一个从 0 到 (x - 1) 的数字流: def my_range (x) : i = 0 while i < x: yield i i += 1 该函数使用了 yield 而不是关键字 return。这样使函数能够一次返回一个值,并且每次被调用时都从停下的位置继续。关键字 yield 是将生成器与普通函数区分开来的依据。 因为上述代码会返回一个迭代器,因此我们可以将其转换为列表或用 for 循环遍历它,以查看其内容。例如,下面的代码: for x in my_range( 5 ): print(x) 输出如下: 0 1 2 3 4 为何要使用生成器? 生成器是构建迭代器的 “懒惰” 方式。当内存不够存储完整实现的列表时,或者计算每个列表元素的代价很高,你希望尽量推迟计算时,就可以使用生成器。但是这些元素只能遍历一次。 由于使用生成器是一次处理一个数据,在内存和存储的需求上会比使用list方式直接全部生成再存储节省很多资源。由此区别

2018.5.18第十节课-Python

匿名 (未验证) 提交于 2019-12-02 22:51:30
函数: 运行结果: #冒泡排序 是可以调换位置 运行结果:应该是 2 3 经过排序调换位置 变成 3 2 #冒泡排序 从一个没有规律的列表中 按照从小到大――――――――――――――――― 运行结果 迭代器----自定义一个迭代器 运行结果: 转载请标明出处: 2018.5.18第十节课-Python 文章来源: 2018.5.18第十节课-Python

函数-生成器、迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:30
#-----列表生成器----- 1 a = [x*2 for x in range(10)] 2 print(a,type(a)) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] <class 'list'> 3 4 def f(n): 5 return n**3 6 7 a = [f(x) for x in range(10)] 8 print(a,type(a)) #[0, 1, 8, 27, 64, 125, 216, 343, 512, 729] <class 'list'> #-----简单赋值方式 1 t = (12,45) 2 a,b = t 3 print(a)#12 4 print(b)#45 #----生成器(生成器就是可迭代对象)----- 1 s = (x*2 for x in range(10)) 2 for i in s: 3 print(i,end=" ") # 0 2 4 6 8 10 12 14 16 18 4 5 #可迭代对象 :内部有iter 方法 6 a = (1,2,3,5) 7 a.__iter__() 8 b = [2,3,4,5] 9 b.__iter__() 10 c = {"a":"d","g":"r"} 11 c.__iter__() 12 e = set(a) 13 print(e,type(e))

Python函数编程――迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:30
我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 1、类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 2、一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为 可迭代对象:Iterable,可迭代的意思就是可遍历、可循环。 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: >>> from collections import Iterable >>> isinstance ([], Iterable ) True >>> isinstance ({}, Iterable ) True >>> isinstance ( 'abc' , Iterable ) True >>> isinstance (( x for x in range ( 10 )), Iterable ) True >>> isinstance ( 100 , Iterable ) False 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

手写一个python迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:30
我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器。 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法。 在一个类的实例对象想要变成迭代器,就必须实现__iter__()和__next__()方法。 调用iter()时,在对象内部默认调用__iter__(),即__iter__()的返回值应该是一个迭代器。 for的每次循环中或者next()时,都是自动调用迭代器的__next__()方法,并有一个返回值。 class Classmate: def __init__(self): self.names = [] self.num = 0 def add(self, name): self.names.append(name) def __iter__(self): return self def __next__(self): if self.num < len(self.names): ret = self.names[self.num] self.num += 1 return ret else: raise StopIteration c = Classmate() c.add("张三") c.add("李四") c.add("王五") for i in c: print(i) """ 张三 李四 王五 """ 来源:博客园

[Python] 迭代器是什么?你每天在用的for循环都依赖它!

匿名 (未验证) 提交于 2019-12-02 22:51:30
顺序 , 分支 , 循环 是编程语言的三大逻辑结构,在Python中都得到了支持,而Python更是为循环结构提供了非常便利的语法: for ... in ... 刚从C语言转入Python的同学可能倾向于写索引下标式的循环,例如下面的代码像遍历C中的数组一样遍历了一个Python中的列表: >>> colors = ['black', 'white', 'red', 'blue'] >>> for i in range(len(colors)): ... print(colors[i]) ... black white red blue 但如果将列表(list)替换为集合(set),这个方法就不奏效了: >>> colors = set(['black', 'white', 'red', 'blue']) >>> for i in range(len(colors)): ... print(colors[i]) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError: 'set' object does not support indexing 这是因为set不像list,string,tuple这些结构,其中的元素从逻辑上讲本身是没有序的,与之类似的还有dict

python 之 函数 生成器

匿名 (未验证) 提交于 2019-12-02 22:51:30
5.10 生成器 函数内有yield关键字,再调用函数就不会立刻执行函数体代码,会得到一个返回值,该返回值就是生成器,生成器本质就是迭代器 1、iter_obj=obj. iter (), 拿到迭代器 2、出发iter_obj. next (),拿到该方法的返回值,赋值给item 3、周而复始,直到函数内不在有yield,即取值完毕 4、for会检测到StopIteration异常,结束循环 yield功能: 1、提供了一种自定义迭代器的方式 2、yield可以返回多次值 range() 5.10.1 生成器之yield的表达式形式

day12-迭代器

匿名 (未验证) 提交于 2019-12-02 22:51:08
迭代器的概念   内部含有_next_和_iter_方法的就是迭代器。      可以被for循环的都是可迭代的,只有是可迭代对象,才能用for循环。   可迭代的内部都有_iter_方法――可迭代协议。   只要是迭代器,一定可迭代。   若A是可迭代的,则A._iter_()方法就可以得带一个迭代器。   迭代器中的_next_()方法可以一个一个的获取值。   有人会问为什么有迭代器,还要用for循环呢?其实for循环使用的就是迭代器。 迭代器的好处   (1)从容器中一个一个的取值,可以把所有的值都取到。   (2)节省内存空间。    文章来源: day12-迭代器