久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 字典item與iteritems的區(qū)別詳解

瀏覽:2日期:2022-07-27 15:46:57

綜述迭代器

對(duì)于原生支持隨機(jī)訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)(如tuple、list),迭代器和經(jīng)典for循環(huán)的索引訪問(wèn)相比并無(wú)優(yōu)勢(shì),反而丟失了索引值(可以使用內(nèi)建函數(shù)enumerate()找回這個(gè)索引值)。但對(duì)于無(wú)法隨機(jī)訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)(比如set)而言,迭代器是唯一的訪問(wèn)元素的方式。

另外,迭代器的一大優(yōu)點(diǎn)是不要求事先準(zhǔn)備好整個(gè)迭代過(guò)程中所有的元素。迭代器僅僅在迭代到某個(gè)元素時(shí)才計(jì)算該元素,而在這之前或之后,元素可以不存在或者被銷(xiāo)毀。這個(gè)特點(diǎn)使得它特別適合用于遍歷一些巨大的或是無(wú)限的集合,比如幾個(gè)G的文件,或是斐波那契數(shù)列等等。

迭代器更大的功勞是提供了一個(gè)統(tǒng)一的訪問(wèn)集合的接口,只要定義了iter()方法對(duì)象,就可以使用迭代器訪問(wèn)。

例如:

List = [1,2,3]L = List.__iter__()>>> L.next()1>>> L.next()2>>> L.next()3

為什么使用迭代器

for i in range(1000): passfor i in xrange(1000): pass

前一個(gè)返回1000個(gè)元素的列表,而后一個(gè)在每次迭代中返回一個(gè)元素,因此可以使用迭代器來(lái)解決復(fù)用可占空間的問(wèn)題

class Fab(object): def __init__(self, max): self.max = max self.n, self.a, self.b = 0, 0, 1 def __iter__(self): return self def next(self): if self.n < self.max: r = self.b self.a, self.b = self.b, self.a + self.b self.n = self.n + 1 return r raise StopIteration()

Fab 類通過(guò) next() 不斷返回?cái)?shù)列的下一個(gè)數(shù),內(nèi)存占用始終為常數(shù) 

示例代碼2

def fab(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n = 1

簡(jiǎn)單地講,yield 的作用就是把一個(gè)函數(shù)變成一個(gè) generator,帶有 yield 的函數(shù)不再是一個(gè)普通函數(shù),Python 解釋器會(huì)將其視為一個(gè) generator,調(diào)用 fab(5) 不會(huì)執(zhí)行 fab 函數(shù),而是返回一個(gè) iterable 對(duì)象!

在 for 循環(huán)執(zhí)行時(shí),每次循環(huán)都會(huì)執(zhí)行 fab 函數(shù)內(nèi)部的代碼,執(zhí)行到 yield b 時(shí),fab 函數(shù)就返回一個(gè)迭代值,下次迭代時(shí),代碼從 yield b 的下一條語(yǔ)句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來(lái)和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行,直到再次遇到 yield。

看起來(lái)就好像一個(gè)函數(shù)在正常執(zhí)行的過(guò)程中被 yield 中斷了數(shù)次,每次中斷都會(huì)通過(guò) yield 返回當(dāng)前的迭代值。

以上這篇python 字典item與iteritems的區(qū)別詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 张家川| 临西县| 封丘县| 龙海市| 定日县| 垣曲县| 二连浩特市| 广东省| 无棣县| 莱西市| 全南县| 平山县| 西丰县| 和林格尔县| 铁岭市| 南华县| 汝州市| 白朗县| 探索| 封丘县| 和平县| 青浦区| 甘孜县| 莎车县| 清徐县| 婺源县| 广汉市| 交口县| 云霄县| 通河县| 桦甸市| 德州市| 涟源市| 黄石市| 连江县| 汪清县| 赫章县| 台安县| 霸州市| 新津县| 宝坻区|