亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中dictionary items()系列函數(shù)的用法實(shí)例

 更新時(shí)間:2014年08月21日 11:04:56   投稿:shichen2014  
這篇文章主要介紹了Python中dictionary items()系列函數(shù)的用法,很實(shí)用的函數(shù),需要的朋友可以參考下

本文實(shí)例講述了Python中dictionary items()系列函數(shù)的用法,對(duì)Python程序設(shè)計(jì)有很好的參考借鑒價(jià)值。具體分析如下:

先來看一個(gè)示例:

import html  # available only in Python 3.x 
def make_elements(name, value, **attrs): 
  keyvals = [' %s="%s"' % item for item in attrs.items()] 
  attr_str = ''.join(keyvals) 
  element = '<{name}{attrs}>{value}</{name}>'.format( 
      name = name, 
      attrs = attr_str, 
      value = html.escape(value)) 
  return element 
make_elements('item', 'Albatross', size='large', quantity=6) 
make_elements('p', '<spam>') 

該程序的作用很簡單,就是生成HTML標(biāo)簽,注意html這個(gè)模塊只能在Python 3.x才有。

起初我只是注意到,生成標(biāo)簽屬性列表的keyvals這個(gè)dictionary類型變量構(gòu)建的方式很有意思,兩個(gè)%s對(duì)應(yīng)一個(gè)item,所以就查閱了相關(guān)的資料,結(jié)果扯出了挺多的東西,在此一并總結(jié)。

注:下面所有Python解釋器使用的版本,2.x 對(duì)應(yīng)的是2.7.3,3.x 對(duì)應(yīng)的是3.4.1
在 Python 2.x 里,官方文檔里items的方法是這么說明:生成一個(gè) (key, value) 對(duì)的list,就像下面這樣:

>>> d = {'size': 'large', 'quantity': 6} 
>>> d.items() 
[('quantity', 6), ('size', 'large')] 

在搜索的過程中,無意看到stackoverflow上這樣一個(gè)問題:dict.items()和dict.iteritems()有什么區(qū)別? ,第一個(gè)答案大致的意思是這樣的:

“起初 items() 就是返回一個(gè)像上面那樣的包含dict所有元素的list,但是由于這樣太浪費(fèi)內(nèi)存,所以后來就加入了(注:在Python 2.2開始出現(xiàn)的)iteritems(), iterkeys(), itervalues()這一組函數(shù),用于返回一個(gè) iterator 來節(jié)省內(nèi)存,但是在 3.x 里items() 本身就返回這樣的 iterator,所以在 3.x 里items() 的行為和 2.x 的 iteritems() 行為一致,iteritems()這一組函數(shù)就廢除了?!?/p>

不過更加有意思的是,這個(gè)答案雖然被采納,下面的評(píng)論卻指出,這種說法并不準(zhǔn)確,在 3.x 里 items() 的行為和 2.x 的 iteritems() 不一樣,它實(shí)際上返回的是一個(gè)"full sequence-protocol object",這個(gè)對(duì)象能夠反映出 dict 的變化,后來在 Python 2.7 里面也加入了另外一個(gè)函數(shù) viewitems() 和 3.x 的這種行為保持一致
為了證實(shí)評(píng)論中的說法,我做了下面的測(cè)試,注意觀察測(cè)試中使用的Python版本:

測(cè)試1(Python 2.7.3):

Python 2.7.3 (default, Feb 27 2014, 19:58:35)  
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'size': 'large', 'quantity': 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> il 
[('quantity', 6), ('size', 'large')] 
>>> it 
<dictionary-itemiterator object at 0x7fe555159f18> 
>>> vi 
dict_items([('quantity', 6), ('size', 'large')]) 

測(cè)試2(Python 3.4.1):

Python 3.4.1 (default, Aug 12 2014, 16:43:01)  
[GCC 4.9.0] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'size': 'large', 'quantity': 6} 
>>> il = d.items() 
>>> it = d.iteritems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'iteritems' 
>>> vi = d.viewitems() 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'viewitems' 
>>> il 
dict_items([('size', 'large'), ('quantity', 6)]) 

可以看到在 Python 3.x 里面,iteritems() 和 viewitems() 這兩個(gè)方法都已經(jīng)廢除了,而 item() 得到的結(jié)果是和 2.x 里面 viewitems() 一致的。
2.x 里 iteritems() 和 viewitems() 返回的內(nèi)容都是可以用 for 來遍歷的,像下面這樣

>>> for k, v in it: 
...  print k, v 
...  
quantity 6 
size large 
>>> for k, v in vi: 
...  print k, v 
...  
quantity 6 
size large 

這兩者的區(qū)別體現(xiàn)在哪里呢?viewitems() 返回的是view object,它可以反映出 dictionary 的變化,比如上面的例子,假如在使用 it 和 vi 這兩個(gè)變量之前,向 d 里面添加一個(gè)key-value組合,區(qū)別就很容易看出來了。

>>> it = d.iteritems() 
>>> vi = d.viewitems() 
>>> d['newkey'] = 'newvalue' 
>>> d 
{'newkey': 'newvalue', 'quantity': 6, 'size': 'large'} 
>>> vi 
dict_items([('newkey', 'newvalue'), ('quantity', 6), ('size', 'large')]) 
>>> it 
<dictionary-itemiterator object at 0x7f50ab898f70> 
>>> for k, v in vi: 
...  print k, v 
...  
newkey newvalue 
quantity 6 
size large 
>>> for k, v in it: 
...  print k, v 
...  
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
RuntimeError: dictionary changed size during iteration 

在第三行中,我們像 d 里面插入了一個(gè)新的元素,vi 可以繼續(xù)遍歷,而且新的遍歷能夠反映出 d 的變化,但是在遍歷 it 的時(shí)候,報(bào)錯(cuò)提示 dictionary 在遍歷的時(shí)候大小發(fā)生了變化,遍歷失敗。

總結(jié)起來,在 2.x 里面,最初是 items() 這個(gè)方法,但是由于太浪費(fèi)內(nèi)存,所以加入了 iteritems() 方法,用于返回一個(gè) iterator,在 3.x 里面將 items() 的行為修改成返回一個(gè) view object,讓它返回的對(duì)象同樣也可以反映出原 dictionary 的變化,同時(shí)在 2.7 里面又加入了 viewitems() 向下兼容這個(gè)特性。
所以在 3.x 里面不需要再去糾結(jié)于三者的不同之處,因?yàn)橹槐A袅艘粋€(gè) items() 方法。

相信本文所述示例對(duì)大家的Python程序設(shè)計(jì)有一定的借鑒價(jià)值。

相關(guān)文章

  • 實(shí)例代碼講解Python 線程池

    實(shí)例代碼講解Python 線程池

    這篇文章主要介紹了Python 線程池的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • 基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識(shí)別

    基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識(shí)別

    這篇文章主要為大家詳細(xì)介紹了基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 一步步教你用python給女朋友寫個(gè)微信自動(dòng)提醒的程序

    一步步教你用python給女朋友寫個(gè)微信自動(dòng)提醒的程序

    如今微信已成為我們?nèi)粘I畹闹饕涣鞴ぞ?但是微信自身的功能有時(shí)候可能并不能滿足我們的需要,因此我們會(huì)想是否可以進(jìn)行微信功能的拓展呢,這篇文章主要給大家介紹了關(guān)于利用python給女朋友寫了個(gè)微信自動(dòng)提醒程序的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python 多線程爬取壁紙網(wǎng)站的示例

    python 多線程爬取壁紙網(wǎng)站的示例

    這篇文章主要介紹了python 多線程爬取壁紙網(wǎng)站的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-02-02
  • Pygame?Font模塊使用教程

    Pygame?Font模塊使用教程

    文本是任何一款游戲中不可或缺的重要要素之一,本文將主要介紹Pygame中Font模塊的使用教程,例如文本的繪制、顯示等,感興趣的同學(xué)可以了解一下
    2021-11-11
  • Python中使用platform模塊獲取系統(tǒng)信息的用法教程

    Python中使用platform模塊獲取系統(tǒng)信息的用法教程

    這里我們整理了Python中使用platform模塊獲取系統(tǒng)信息的用法教程,包括操作系統(tǒng)與Python環(huán)境以及系統(tǒng)的環(huán)境變量等信息的獲取方法:
    2016-07-07
  • 深入理解Python中字典的鍵的使用

    深入理解Python中字典的鍵的使用

    這篇文章主要介紹了深入理解Python中字典的鍵的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • Django REST Framework之頻率限制的使用

    Django REST Framework之頻率限制的使用

    這篇文章主要介紹了Django REST Framework之頻率限制的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • pytorch加載的cifar10數(shù)據(jù)集過程詳解

    pytorch加載的cifar10數(shù)據(jù)集過程詳解

    這篇文章主要介紹了pytorch加載的cifar10數(shù)據(jù)集,到底有沒有經(jīng)過歸一化,本文對(duì)這一問題給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • python中三種輸出格式總結(jié)(%,format,f-string)

    python中三種輸出格式總結(jié)(%,format,f-string)

    在Python語言編程中,我們會(huì)與字符串打交道,那務(wù)必會(huì)輸出字符串來查看字符串的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于python中三種輸出格式的相關(guān)資料,三種格式分別是%,format,f-string,需要的朋友可以參考下
    2022-03-03

最新評(píng)論