迭代计算

Python中的迭代器、生成器——10

别等时光非礼了梦想. 提交于 2019-12-27 03:28:46
什么是迭代器 迭代器即迭代的工具 迭代是一个重复的过程,每一次重复即一次迭代,且每次迭代的结果都是下一次迭代的初始值 while True: #这里只是单纯的重复,不是迭代 print('-----') l = [1,2,3] count = 0 while count <= len(l): #这里是迭代 print(l[count]) count += 1 迭代器协议 1、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 2、可迭代对象:实现了迭代器协议的对象(对象内部定义一个__iter__()方法) 3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环、sum、min、max函数等)使用迭代器协议访问对象 对于序列类型,如:字符串、列表元组等,我们可以使用索引的方式迭代取出其包含的元素,但是对于无序类型:字典,集合,文件等是没有索引的,所以我们要想取出其内部包含的元素,则必须找出一种不依赖于索引的方式 可迭代对象指的是有内置方法__iter__的对象: 'hello'.__iter__ (1,2,3).__iter__ [1,2,3].__iter__ {'a':1}.__iter__ {'a','b'}.__iter__ {'a','b'}.__iter_

Python之迭代器和生成器

浪尽此生 提交于 2019-12-27 03:28:09
一、迭代器 1、迭代器的概念   迭代器即迭代的工具,那么什么是迭代呢?迭代是一个重复的过程,每一次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值。下面的代码就不是迭代. while True: print('====>')   上面代码只是单纯的重复,不是迭代。下面的代码就是迭代 1 l=[1,2,3] 2 count=0 3 while count<len(1): 4 print(l[count]) 5 count+=1 二、为什么要有迭代器?什么是可迭代对象?什么是迭代器对象?   1、为什么要有迭代器         对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的         迭代方式,这就是为什么要需要迭代器。   2、什么是可迭代对象         可迭代对象指的是内置有_iter_方法的对象,即obj._iter_.如下 1 'hello'._iter_ 2 (1,2,3)._iter_ 3 [1,2,3]._iter_ 4 {'a':1}._iter_ 5 {'a','b'}._iter_ 6 open('a.txt')._iter_   3、什么是迭代器对象         可迭代对象执行obj._iter_(

生成器和迭代器

怎甘沉沦 提交于 2019-12-27 03:20:48
迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器 1.可迭代对象 有 __iter__ 方法的对象,都是可迭代对象,有以下6种 可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象 "zx".__iter__() ["zx"].__iter__() {"zx":"wl"}.__iter__() ("zx",).__iter__() {"z","x"}.__iter__() with open("prize.txt","r") as file: file.__iter__() 2.迭代器对象 1.可迭代的对象执行 __iter__ 方法得到的返回值是迭代器对象。2.迭代器对象指的是即内置有 __iter__ 又内置有 __next__ 方法的对象 list=[1,2,3,4,5,6] zx=list.__iter__() while True: try: print(zx.__next__()) except: break 文件类型是迭代器对象 open('a.txt')._

迭代器与生成器

泪湿孤枕 提交于 2019-12-27 03:18:35
迭代器 我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。 而生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。 *可以被 next() 函数调用并不断返回下一个值的对象称为迭代器: Iterator 。 生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。 把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数。 这是因为Python的 Iterator 对象表示的是一个数据流,Iterator对象可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所以 Iterator

迭代器 生成器

跟風遠走 提交于 2019-12-27 03:16:28
迭代: 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值 1 while True: 2 print('哈') #只是单纯的重复,因此不是迭代 3 4 lists = [1, 2, 3] 5 count = 0 6 while count < len(lists): 7 print(lists[count]) 8 count += 1 迭代的概念 为何要有迭代器: 对于序列类型的数据(列表,元组,字符串),我们可以使用索引的方法迭代取出每个元素,但对于非序列类型(集合,字典,文件类型等)这类没有的索引的数据,我们就无法使用上述方法,因此就要使用迭代器 迭代器协议: 对象必须提供一个next方法,执行该方法的结束是要么返回迭代中的下一项,要么就引起一个Stoplteration异常以终止迭代(只能前进不能后退) 可迭代对象: 内置有__iter__方法的对象,即obj.__iter__() 1 'hello'.__iter__() 2 [1, 2, 3].__iter__() 3 ('a', 'b', 1).__iter__() 4 {'name': 'chen', 'age': 18}.__iter__() 5 {'a', 1}.__iter__() 6 open('test').__iter__() 可迭代对象 迭代器对象: 可迭代对象执行obj.

python之迭代器、生成器及列表推导式

为君一笑 提交于 2019-12-27 03:16:02
一、迭代器     迭代器就是迭代的工具,迭代是一个重复的过程,每次重复都是一次迭代并且每次迭代的结果都是下次迭代的初始值。      1 lst=[1,2,3,4,5] 2 count=0 3 while count<len(lst): 4 print(lst[count]) 5 count +=1     既然有for循环为什么还要用迭代器呢? 当然 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包   含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引   的迭代方式,这就是迭代器。   可迭代对象:    可迭代对象指的是内置有__iter__方法的对象,我们要如何查看内置是否有__iter__()方法呢?   1 lst=[1,2,3] 2 print(dir(lst))   在需要查看的对象前使用dir方法 就是来查看该对象内置的方法,如果其中含有__iter__,又含有__next__()方法那么该对象就是可迭代对象   注:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象。    1 lst=[1,2,3] 2 g = lst.__iter__() 3 print(g.__next__()) 4 print(g.__next__()) 5 print(g.__next__()) 6

迭代器,生成器,枚举

删除回忆录丶 提交于 2019-12-27 03:13:30
一、迭代器 1、通过迭代器取值的优缺点 优点:不依赖索引取值,完成取值 缺点:不能计算长度,不能指定位取值(只能从前往后逐一取值) 2、可迭代对象 可迭代对象是有—iter—()方法的对象,调用该方法返回迭代器对象 可迭代对象有:str | list | tuple | dict | set | range()| file | 迭代器对象 | enumrate()| 生成器 3、迭代器对象: 迭代器对象:有—next—()方法的对象,也就是用该方法一次从迭代器对象中获取一个值,取出一个少一个 迭代器对象有:file | enumerate()| 生成器 重点: 1、从迭代器对象中取元素,取一个少一个,如果啊哟从头开始取,需要重新获得拥有所有元素的迭代器对象 2、迭代器对象也有—iter—()方法,调用后得到的是自己本身(当前含义几个元素,得到的就只有几个元素的迭代器对象) 4、for循环迭代优点 自动获取被迭代对象的迭代器对象 在内部一次一次调用—next—()方法取值 自动完成异常处理 二、生成器 1、生成器:包含yied关键字的函数就是生成器 def my_generator(): yield 1 yield 2 yield 3 g_obj = my_generator() my_generator()并不会执行函数体,得到的返回值就是生成器对象 生成器对象就是迭代器对象 r1

迭代器

半世苍凉 提交于 2019-12-27 03:13:01
迭代器的概念:从装多个值的容器中一次取出一个值给外界 器:包含了多个值得容器 迭代:循环反馈(一次从容器中取出一个值) 通过迭代器取值的优缺点: 优点:不依赖索引取值 缺点:不能计算长度,不能指定取值(只能从前往后逐一取值) 遍历:被遍历的对象必须是有序容器 案例; ls='asasd' for i in ls: print(i) ls1=[1,2,12] for i in ls1: print(i) ls = [1, 2, 3, 4, 5, 6] i=0 while i <len(ls): print(i) i+=1 st = {1, 2, 3, 4, 5} while i <len(st): print(i) i+=1 dic = {'a': 1, 'b': 2, 'c': 3} for k,v in dic.items(): print(k,v) 可迭代对象 对象:python中的一个对象(装有地址的变量) 可迭代对象:该对象有__iter__()方法,调用该方法返回迭代器对像 可迭代对象有哪些: str | list | tuple | dict | set | range() | file(文件) | 迭代器对象 | enumerate()(枚举对象) 案例 for v in 'asdfghjkl'.__iter__(): print(v) for v in [1,23,

day_14带参装饰器、可迭代对象、迭代器对象、FOR 迭代器工作原理、枚举对象、生成器及生成表达式

元气小坏坏 提交于 2019-12-27 03:12:23
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰器:装饰器名就是外层函数 @outer @outer # fn = outer(fn) def fn(): pass 今日内容 1.带参装饰器 | 2.wrapper | 3. 可迭代对象 | 4.迭代器对象 | 5.for 迭代器工作原理 | 6.枚举对象 | 7.生成器 1. 带参装饰器 : 通常,装饰器为被装饰的函数添加新功能,需要外界的参数:可以在 outer外再套一层函数,通过形参给内部传参 。 -- outer参数固定一个,就是func -- inner参数固定同被装饰的函数,也不能添加新参数 -- 可以借助函数的嵌套定义,外层给内层传参, 2. 系统 functools 的wraps带参装饰器:i nner本来是装饰原函数func的,但func还有部分功能inner没有,那就给inner加一个装饰器,把这此功能装到inner函数上,将原函数的部分功能装饰给inner,从面达到对原函数func更好的装饰。(通过改变inner的假指向,本质外界使用的还是inner,但是打印显示的是wraps中原函数的id) 3. 迭代器 : 优点: --

Python之函数进阶

一世执手 提交于 2019-12-26 21:37:17
本节内容 上一篇中介绍了Python中函数的定义、函数的调用、函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函数 内置函数 总结 一、递归函数 函数是可以被调用的,且一个函数内部可以调用其他函数。如果一个函数在内部调用本身,这个函数就是一个递归函数。函数递归调用的过程与循环相似,而且理论上,所有的递归函数都可以写成循环的方式,但是递归函数的优点是定义简单,逻辑清晰。递归和循环都是一个重复的操作过程,这些重复性的操作必然是需要有一定的规律性的。另外,很明显递归函数也需要一个结束条件,否则就会像死循环一样递归下去,直到由于栈溢出而被终止(这个下面介绍)。 可见,要实现一个递归函数需要确定两个要素: 递归规律 结束条件 1. 实例:计算正整数n的阶乘 n! = 1 * 2 * 3 * ... * n 循环实现 思路有两个: 从1乘到n,需要额外定义一个计数器存放n当前的值 从n乘到1,无需额外定义计数器,直接对n进行减1操作,直到n=0返回1结束 def fact(n): if n == 0: return 1 result = 1 while n >= 1: result *= n n -= 1 return result 递归实现 先来确定递归函数的两个要素: 递归规律:n!=1 * 2 * 3 * ... * n = (n