python中yield甚么意义?
可迭代工具
mylist 是一个可迭代的工具。当你应用一个列表天生式来建设一个列表的时分,就建设了一个可迭代的工具:
>>> mylist = [x*x for x in range(3)] >>> for i in mylist : ... print(i)
正在这里,一切的值都存正在内存傍边,以是其实不适宜年夜量数据
天生器
可迭代
只能读取一次
及时天生数据,没有全存正在内存中
>>> mygenerator = (x*x for x in range(3)) >>> for i in mygenerator : ... print(i)
留意你之后不克不及再应用for i in mygenerator了
yield要害字
yield 是一个相似 return 的要害字,只是这个函数前往的是个天生器
当你挪用这个函数的时分,函数外部的代码其实不立马执行 ,这个函数只是前往一个天生器工具
当你应用for进行迭代的时分,函数中的代码才会执行
>>> def createGenerator() : ... mylist = range(3) ... for i in mylist : ... yield i*i ... >>> mygenerator = createGenerator() # create a generator >>> print(mygenerator) # mygenerator is an object! <generator object createGenerator at 0xb7555c34> >>> for i in mygenerator: ... print(i)
第一次迭代中你的函数会执行,从开端抵达 yield 要害字,而后前往 yield 后的值作为第一次迭代的前往值. 而后,每一次执行这个函数城市持续执行你正在函数外部界说的阿谁轮回的下一次,再前往阿谁值,直到不能够前往的。
管制天生器的穷尽
>>> class Bank(): # let's create a bank, building ATMs ... crisis = False ... def create_atm(self) : ... while not self.crisis : ... yield "$100" >>> hsbc = Bank() # when everything's ok the ATM gives you as much as you want >>> corner_street_atm = hsbc.create_atm() >>> print(corner_street_atm.next()) $100 >>> print(corner_street_atm.next()) $100 >>> print([corner_street_atm.next() for cash in range(5)]) ['$100', '$100', '$100', '$100', '$100'] >>> hsbc.crisis = True # crisis is coming, no more money! >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> wall_street_atm = hsbc.create_atm() # it's even true for new ATMs >>> print(wall_street_atm.next()) <type 'exceptions.StopIteration'> >>> hsbc.crisis = False # trouble is, even post-crisis the ATM remains empty >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> brand_new_atm = hsbc.create_atm() # build a new one to get back in business >>> for cash in brand_new_atm : ... print cash $100 $100 $100 $100 $100 $100 $100 $100 $100 ...
相干保举:《Python教程》
以上就是python中yield甚么意义的具体内容,更多请存眷资源魔其它相干文章!
标签: yield Python python教程 python编程 python使用问题
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!