“人造太阳”计划

Python迭代器和生成器

孤人 提交于 2019-12-27 03:48:19
一、 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的。 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置。 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值。 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 二、迭代器 2.1 python中的for循环 要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable 看,报错了!报了什么错呢?“TypeError: 'int'

18、迭代器和生成器

别等时光非礼了梦想. 提交于 2019-12-27 03:47:32
迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕(使用生成器) 2、 批量处理文件,用户指定要查找的目录和内容,将本层目录下所有文件中包含要查找内容的每一行都输出到屏幕 本篇导航: 可迭代的 迭代器 生成器 列表推导式和生成器表达式 一、可迭代的 for i in 50: print(i) #运行结果: # Traceback (most recent call last): # File "G:/python/python代码/八月/day2 迭代器生成器/3迭代器.py", line 8, in <module> # for i in 50: # TypeError: 'int' object is not iterable 报错: TypeError: 'int' object is not iterable 类型报错:'int'对象是不可迭代的 何为迭代? iterable: 可迭代的;迭代的; 可迭代的:从上面代码可以简单分析出能被for循环取值的就是可迭代,那么我们就可以初步总结出可迭代的类型: str、list、tuple、set、dict 可迭代的 ——对应的标志 拥有__iter__方法 print('__iter__' in dir([1,2,3]))

Python-装饰器、生成器

限于喜欢 提交于 2019-12-27 03:46:50
python中的for循环 for i in [1,2,3,4]: print(i) 正常可运行的,但是如下运行呢? for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable 看,报错了!报了什么错呢?“TypeError: 'int' object is not iterable”,说int类型不是一个iterable。 说明int数据类型并不是一个可迭代类型 字符串、列表、元组、字典、集合 都可以被for循环,说明他们 都是可迭代的 。 让我们导入模块试验一下: from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Iterable)) print(isinstance(s,Iterable)) 迭代器协议

python函数-迭代器&生成器

只谈情不闲聊 提交于 2019-12-27 03:45:11
python函数-迭代器&生成器 一、迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议:     ① 协议内容:内部实现__iter__方法     ② 验证方法:dir()方法。通过dir()方法查看是否含有__iter__方法     ③ __iter__方法的作用:可迭代的数据类型执行__iter__方法后会生成一个迭代器对象 print([1,2].__iter__()) 结果 <list_iterator object at 0x1024784a8> 2 迭代器协议   1 引出 ''' dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法,都是以列表的形式返回给我们的,为了看的更清楚,我们分别把他们转换成集合, 然后取差集。 '''#实现的所有方法 print(dir([1,2].__iter__())) print(dir([1,2]))#取差集 print(set(dir([1,2].__iter__()))-set(dir([1,2]))) 结果: {'__length_hint__', '__next__', '__setstate__'}   我们看到在列表迭代器中多了三个方法,那么这三个方法都分别做了什么事呢? iter_l = [1,2

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:22:15
一、什么是迭代器 迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的 # 这里的循环也是一个迭代,每次基于上一次的结果而取值 li = 'hello' i = 0 while i < len(li): print(li[i]) i += 1 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值 二、为何要用迭代器   为了找出一种通用的、可以不依赖于索引的迭代取值方式 三、如何使用迭代器 可迭代的对象: 但凡内置有 __iter__ 方法的对象都称之为可迭代的对象    如:str、list、tuple、dict、set、文件对象 迭代器对象: 既内置有 __iter__方法,又内置有 __next__ 方法    如:文件对象 关于 __iter__ 方法:   调用可迭代对象的 __iter__ 会的到一个迭代器对象   调用迭代器对象的 __iter__ 会的到迭代器本身 可迭代对象可以转化为迭代器对象:调用可迭代对象内置的 __iter__ 方法会有一个返回值,该返回值就是对应的迭代器对象 dic = {'x':1, 'y':2, 'z':3} iter_dic = dic.__iter__() print(iter_dic) res1 = iter_dic.__next__() print(res1) res2 = iter_dic.__next__

生成器和迭代器

怎甘沉沦 提交于 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')._

c迭代器与生成器

…衆ロ難τιáo~ 提交于 2019-12-27 03:17:57
一:迭代器 1.什么是迭代?   1.重复 2.下一次重复是基于上一次的结果 # l=['a','b','c','d'] # count=0 # while count < len(l): # print(l[count]) #count的值基于上一次结果,所以是迭代# count+=1 2.迭代器协议   指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)。 python 为了提供一种不依赖索引的迭代方式   以obj=[1,2,3,,4,5]为例:     python会为一些对象内置.__iter__方法,能够.__iter__的都是可以成为可迭代对象.       如果我们obj.__iter__()后得到一个结果就是 迭代器。 迭代器既有.__iter__ 方法又有 .__next__方法.     迭代器的优点:     1.提供了一种不依赖索引的迭代方式     2.惰性计算,节省内存   迭代器的缺点:     1.取值不如按照索引取值的方便     2.只能前进,不能后退     3.无法获取长度 判断是否为可迭代对象或者迭代器对象的方法: 以a=[1,2,3,4]为例: 方法一:    obj=a.__iter__()    说明他是可迭代对象,obj成为迭代器

迭代器 生成器

跟風遠走 提交于 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.