python for循环

Python 基础 -2.4.3 迭代器

折月煮酒 提交于 2019-12-27 03:58:16
迭代器 = 循环 迭代器 我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 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。 可以使用isinstance(

Python基础知识之迭代器

会有一股神秘感。 提交于 2019-12-27 03:56:33
我们已经知道,可以直接作用于·for·循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 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 可以使用`isinstance()`判断一个对象是否是

Python条件判断和循环

﹥>﹥吖頭↗ 提交于 2019-12-27 03:53:56
条件判断: age = 20 if age >= 18: print(‘your age is’, age) print(‘adult’) 根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。 也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了: age = 3 if age >= 18: print(‘your age is’, age) print(‘adult’) else: print(‘your age is’, age) print(‘teenager’) 注意不要少写了冒号:。 elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是: if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> 循环 Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来,看例子: names = [‘Michael’, ‘Bob’, ‘Tracy’] for name in names: print(name) 执行这段代码,会依次打印names的每一个元素: Michael Bob Tracy 所以for x in

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'

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基础】迭代器和生成器函数

左心房为你撑大大i 提交于 2019-12-27 03:29:55
1、迭代器协议: 1、迭代器协议是指:对象必须提供一个 __next__() 方法,执行该方法要么返回迭代中的下一项,要么就引起一个 StopIteration 异常,以终止迭代(只能往后走不能往前退) 2、可迭代对象: 实现了迭代器协议的对象 (如何实现:对象内部定义了一个__iter__()方法) 3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。 注意: iter.ls__next__() #__next__() ---->next() __next__() 是迭代器内置函数,而next() 是python内置函数,两者效果相同 字符串、列表、元组、字典、集合等 都不是可迭代对象,但是能够被for循环, for循环其实就是先把它们转化为可迭代对象( li.__iter__()或者iter(li) ),然后进行__next__()方法一个个取出 >>> a = iter([1,2,3,4,5]) >>> a <list_iterator object at 0x101402630> >>> a.__next__() 1 >>> a.__next__() 2 >>> a.__next__() 3 >>> a.__next__() 4 >>> a.__next__() 5 >>> a._

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_(

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

手写一个python迭代器过程详解 - python

梦想与她 提交于 2019-12-27 00:37:37
文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习 分析 我们都知道一个可迭代对象可以通过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("王五