python的for循环语句怎么理解,python中for循环的用法
简述
当我们使用for循环时,我们重复运行一个代码块,或者迭代容器对象中的元素,比如一些顺序对象,列表,字典,元组,甚至文件等。而for循环的本质是取出迭代器对象中的迭代器,然后在迭代器上连续操作。容器是元素的集合。str、list、set、dict、file、sockets对象都可以看作容器,容器都可以迭代(用于for、while等语句中),所以称为可迭代对象。迭代对象实现_ _ iterator _ _方法,该方法返回一个迭代器对象。Iterator保存一个内部状态的字段,用来记录下一次迭代的返回值。它实现了__next__和_ _ iterator _ _方法。迭代器不会一次将所有元素加载到内存中,而是在需要时生成返回结果。生成器是一个特殊的迭代器,它的返回值不是通过return而是带有yield。
例如,在open (requirement.txt )中的行的迭代文件:注:本文针对的示例是针对Python3,同时对Python2做了注释,注意区分自己使用的版本。:打印(行,结束= ).结构==1.12.0降价==2.6.7for循环原理
迭代对象需要实现_ _ iterator _ _方法并返回一个迭代器。什么是迭代器?迭代器只需要实现__next__方法。
测试=[23,12,45,12]对象=测试。_ _ ITER _ _ () #有这个方法,说明列表是一个iterable对象objlist _ iterator对象,在0x039983d0obj。_ _ next _ () #有这个方法,说明obj是迭代器23obj。_ _ next _ _ () 12obj。_ _ next _ _ () 45obj。_ _ next _ _ () 12obj。_ _ next _ () traceback(最近一次调用last):文件 stdin ,第1行,InModuleIteration list是一个iterable对象,因为它实现了_ _ iterator _ _方法,并返回一个iterator对象(list_iterator),因为它实现了__next__方法。我们看到它一直在调用__next__方法,实际上它一直在迭代获取容器中的元素,直到容器中不再有元素抛出StopIteration异常。(在Python2中,实现迭代器成为不带下划线的下一个方法)
首先,确定该对象是否是可迭代对象。如果不是,直接报错,抛出TypeError异常。如果是,调用_ _ iterator _ _方法并返回一个迭代器。它一直调用迭代器的__next__方法。每次它在迭代器中按顺序返回值,迭代到最后,如果没有更多的元素,就抛出异常StopIteration。python会自己处理这个异常,不会向developer 000公开。
示例1:
类Test: def __init__(self,number):self . I=0 self . number=number def _ _ ITER _ _(self):return self _ _ next _ _(self):if self . iself . number:I=self . I=2 return IELSE:#当self.i=self.number时,停止迭代test (10)中j的raise stop迭代():print (j)例2:
class Account():def _ _ init _ _(self,account_name,account_type,account_cost,Return _ amount=0): self。account _ name=account _ name #帐户名自身。account _ type=account _ type #帐户类型本身。帐户成本=帐户成本#每月费用本身。return _ amount=return _ amount #退款金额class account iterator():def _ _ init _ _(self,Accounts):self . Accounts=Accounts # Accounts set self . index=0 def _ _ ITER _ _(self):return self def _ _ next _ _(self):if self . index=len(self . Accounts):raise stop iteration(到此结束.)else: self.index=1返回self . accounts[self . index-1]accounts=[account( KKDHS ,年费用户,450.00,50),Account(qkdyb ,月结用户,100.00),Account(dsdc ,月结用户,190.00.25),Account (CMDBKS ,月结用户,70.00.10),Account(爱听歌曲的柜子 40)]for I in Account iterator(accounts):print
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。