python 字典item與iteritems的區(qū)別詳解
綜述迭代器
對于原生支持隨機(jī)訪問的數(shù)據(jù)結(jié)構(gòu)(如tuple、list),迭代器和經(jīng)典for循環(huán)的索引訪問相比并無優(yōu)勢,反而丟失了索引值(可以使用內(nèi)建函數(shù)enumerate()找回這個索引值)。但對于無法隨機(jī)訪問的數(shù)據(jù)結(jié)構(gòu)(比如set)而言,迭代器是唯一的訪問元素的方式。
另外,迭代器的一大優(yōu)點(diǎn)是不要求事先準(zhǔn)備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計(jì)算該元素,而在這之前或之后,元素可以不存在或者被銷毀。這個特點(diǎn)使得它特別適合用于遍歷一些巨大的或是無限的集合,比如幾個G的文件,或是斐波那契數(shù)列等等。
迭代器更大的功勞是提供了一個統(tǒng)一的訪問集合的接口,只要定義了iter()方法對象,就可以使用迭代器訪問。
例如:
List = [1,2,3] L = List.__iter__() >>> L.next() 1 >>> L.next() 2 >>> L.next() 3
為什么使用迭代器
for i in range(1000): pass
for i in xrange(1000): pass
前一個返回1000個元素的列表,而后一個在每次迭代中返回一個元素,因此可以使用迭代器來解決復(fù)用可占空間的問題
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 類通過 next() 不斷返回數(shù)列的下一個數(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
簡單地講,yield 的作用就是把一個函數(shù)變成一個 generator,帶有 yield 的函數(shù)不再是一個普通函數(shù),Python 解釋器會將其視為一個 generator,調(diào)用 fab(5) 不會執(zhí)行 fab 函數(shù),而是返回一個 iterable 對象!
在 for 循環(huán)執(zhí)行時,每次循環(huán)都會執(zhí)行 fab 函數(shù)內(nèi)部的代碼,執(zhí)行到 yield b 時,fab 函數(shù)就返回一個迭代值,下次迭代時,代碼從 yield b 的下一條語句繼續(xù)執(zhí)行,而函數(shù)的本地變量看起來和上次中斷執(zhí)行前是完全一樣的,于是函數(shù)繼續(xù)執(zhí)行,直到再次遇到 yield。
看起來就好像一個函數(shù)在正常執(zhí)行的過程中被 yield 中斷了數(shù)次,每次中斷都會通過 yield 返回當(dāng)前的迭代值。
以上這篇python 字典item與iteritems的區(qū)別詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)時監(jiān)控logstash日志代碼
這篇文章主要介紹了python實(shí)時監(jiān)控logstash日志代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python3調(diào)用windows dos命令的例子
今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python找出因數(shù)與質(zhì)因數(shù)的方法
這篇文章主要介紹了python找出因數(shù)與質(zhì)因數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python接口自動化淺析logging日志原理及模塊操作流程
這篇文章主要為大家介紹了Python接口自動化系列文章淺析logging日志原理及模塊操作流程,文中詳細(xì)說明了為什么需要日志?日志是什么?以及日志用途等基本的原理2021-08-08

