国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python生成器,可迭代對(duì)象,迭代器區(qū)別和聯(lián)系

2020-02-22 23:07:07
字體:
供稿:網(wǎng)友

生成器,可迭代對(duì)象,迭代器之間究竟是什么關(guān)系?

用一幅圖來概括:

1.生成器

定義生成器

方式一:

//區(qū)別于列表生成式 gen = [x*x for x in range(5)]gen = (x*x for x in range(5)) print(gen) //Out:<generator object <genexpr> at 0x00000258DC5CD8E0>

方式二:

def fib():  prev, curr = 0, 1  while True:    yield curr    prev, curr = curr, curr + prevf = fib()print(f) //Out:<generator object fib at 0x00000258DC5CD150>

定義成功后,我們可以利用next()訪問生成器下一個(gè)元素

print(next(gen)) //0print(next(gen)) //1...print(next(gen)) //16print(next(gen)) //StopIteration

但一般用for循環(huán)遍歷

for n in gen:  print(n) //0 1 4  9 16

2.迭代器

任何實(shí)現(xiàn)了__iter__和__next__()方法的對(duì)象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一個(gè)值。所以生成器是特殊的迭代器,她內(nèi)部具有這兩種方法。

一個(gè)自定義的迭代器如下:

class Fib:  def __init__(self):    self.prev = 0    self.curr = 1   def __iter__(self):    return self   def __next__(self):    value = self.curr    self.curr += self.prev    self.prev = value    return valuef = Fib() count = 1 for n in f:  print(n)  count = count+1  if count>=10:    break//Out:1 1 2 3 5 8 13 21 34

3.可迭代對(duì)象

像list,tuple,set,dict,str等可以直接作用于for循環(huán)的對(duì)象,稱為可迭代對(duì)象。可迭代對(duì)象實(shí)現(xiàn)了__iter__方法,用于返回迭代器。

demo = [1,2,3,4]print(isinstance(demo, Iterable)) //Trueiter_object = iter(demo)print(iter_object) //<list_iterator object at 0x00000258DC5EF748>

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 报价| 洪泽县| 收藏| 策勒县| 徐州市| 临江市| 大同市| 花莲县| 永川市| 涞水县| 皋兰县| 景宁| 宁陵县| 长治市| 宁阳县| 鄂托克前旗| 青铜峡市| 萨迦县| 秭归县| 平谷区| 安阳县| 广东省| 从江县| 高平市| 林西县| 广德县| 阳山县| 陆川县| 隆子县| 谷城县| 巴彦淖尔市| 磐石市| 清水县| 东安县| 云和县| 普兰县| 桑日县| 晴隆县| 栖霞市| 林州市| 五台县|