国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 泰来县| 绥芬河市| 太白县| 岱山县| 宣威市| 东乌| 弥勒县| 湖州市| 景谷| 饶河县| 宁武县| 翁牛特旗| 乌鲁木齐市| 阳泉市| 沂南县| 刚察县| 革吉县| 宽甸| 开化县| 小金县| 洛隆县| 门源| 灯塔市| 湛江市| 金堂县| 兴宁市| 新龙县| 崇左市| 白玉县| 若尔盖县| 庄浪县| 体育| 嘉义县| 镶黄旗| 依安县| 通江县| 武夷山市| 浑源县| 盐山县| 肇东市| 休宁县|