欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Python iter() 方法的用法

 更新時間:2019年07月11日 15:53:32   作者:千鋒Python唐唐君  
這篇文章主要介紹了深入了解Python iter() 方法的知識,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

今天我們來介紹下Python基礎(chǔ)教程學(xué)習(xí)之iter() 方法另外的用法。據(jù)說很少有人知道這個用法!

一、上代碼、學(xué)用法

我們都比較熟悉 iter(obj),會返現(xiàn)一個迭代器,如果 obj 不是可迭代對象,則會報錯。但其實如果仔細(xì)看官方文檔,會發(fā)現(xiàn) iter() 方法其實是接受兩個參數(shù)的,文檔說明如下

iter(object[, sentinel])

sentinel 英文翻譯為 哨兵。

sentinel 參數(shù)是可選的,當(dāng)它存在時,object 不再傳入一個可迭代對象,而是一個可調(diào)用對象,通俗點說就是可以通過()調(diào)用的對象,而 sentinel 的作用就和它的翻譯一樣,是一個“哨兵”,當(dāng)時可調(diào)用對象返回值為這個“哨兵”時,循環(huán)結(jié)束,且不會輸出這個“哨兵”。

可能有點難懂,用一個簡單需求來說明,需求說明如下:

心里想一個[1, 10]范圍的數(shù),然后代碼開始隨機,當(dāng)隨機到想的數(shù)時停止,看每次代碼需要隨機幾次。

實現(xiàn)分析:看起來應(yīng)該很簡單,random,然后加一個if判斷即可,但是用 iter() 來實現(xiàn)更簡單。實現(xiàn)代碼如下:

from random import randint
def guess():
 return randint(0, 10)
num = 1
# 這里先寫死心里想的數(shù)為5
for i in iter(guess, 5):
 print("第%s次猜測,猜測數(shù)字為: %s" % (num, i))
 num += 1
# 當(dāng) guess 返回的是 5 時,會拋出異常 StopIteration,但 for 循環(huán)會處理異常,即會結(jié)束循環(huán)

二、還是看看文檔吧

關(guān)于這兩個參數(shù),文檔里也說的很詳細(xì),分段解釋如下:

The first argument is interpreted very differently depending on the presence of the second argument.

翻譯:第一個參數(shù)根據(jù)第二個參數(shù)有不同的含義

Without a second argument, object must be a collection object which supports the iteration protocol (the _iter_() method), or it must support the sequence protocol (the _getitem_() method with integer arguments starting at 0). If it does not support either of those protocols, TypeError is raised.

翻譯:如果沒有第二個參數(shù),object(即第一個參數(shù))是一個支持迭代器協(xié)議(實現(xiàn)_iter_()方法的)的集合對象,或者是支持序列協(xié)議(實現(xiàn)_getitem_()方法)且是從0開始索引。如果它不支持其中任何一個,則拋出 TypeError 異常

簡單來說就是,如果沒有第二個參數(shù),就是我們比較熟悉的用法。代碼示例如下:

In [5]: iter("123")
Out[5]: <str_iterator at 0x105c9b9e8>
In [6]: iter([1, 2, 3])
Out[6]: <list_iterator at 0x105f9f8d0>
In [7]: iter(123)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-c76acad08c3c> in <module>()
----> 1 iter(123)
TypeError: 'int' object is not iterable

再來看看有第二個參數(shù)的情況

If the second argument, sentinel, is given, then object must be a callable object. The iterator created in this case will call object with no arguments for each call to its _next_() method; if the value returned is equal to sentinel, StopIteration will be raised, otherwise the value will be returned.

翻譯:如果給定了第二個參數(shù) sentinel,object 則必須是一個可調(diào)用對象,這個可調(diào)用對象沒有任何參數(shù),當(dāng)可調(diào)用對象的返回值等于 sentinel 的值時,拋出 StopIteration 的異常,否則返回當(dāng)前值。(這里如果不好理解可調(diào)用對象,可以理解為函數(shù),這樣更容易想明白)

對于這個用法的適用場景,文檔中也給出了說明:

One useful application of the second form of iter() is to build a block-reader. For example, reading fixed-width blocks from a binary database file until the end of file is reached:

翻譯:對于第二個參數(shù),一個有用的場景是創(chuàng)建一個 blokc-reader,即根據(jù)條件中斷讀取。比如:從二進制數(shù)據(jù)庫文件讀取固定寬度的塊,直到到達文件的末尾,代碼示例如下:

from functools import partial
with open('mydata.db', 'rb') as f:
 for block in iter(partial(f.read, 64), b''):
 process_block(block)

三、小結(jié)一下

1、iter() 方法不管有沒有第二個參數(shù),返回的都是迭代器

2、iter() 方法第一個參數(shù)的參數(shù)類型,根據(jù)有無第二個參數(shù)決定

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • PyTorch實現(xiàn)線性回歸詳細(xì)過程

    PyTorch實現(xiàn)線性回歸詳細(xì)過程

    本文介紹PyTorch實現(xiàn)線性回歸,線性關(guān)系是一種非常簡單的變量之間的關(guān)系,因變量和自變量在線性關(guān)系的情況下,可以使用線性回歸算法對一個或多個因變量和自變量間的線性關(guān)系進行建模,該模型的系數(shù)可以用最小二乘法進行求解,需要的朋友可以參考一下
    2022-03-03
  • Python中循環(huán)引用(import)失敗的解決方法

    Python中循環(huán)引用(import)失敗的解決方法

    在python中常常會遇到循環(huán)import即circular import的問題,下面這篇文章主要給大家介紹了關(guān)于Python中循環(huán)引用(import)失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • python實現(xiàn)整數(shù)序列求和

    python實現(xiàn)整數(shù)序列求和

    這篇文章主要介紹了python實現(xiàn)整數(shù)序列求和,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python爬取亞馬遜書籍信息代碼分享

    python爬取亞馬遜書籍信息代碼分享

    這篇文章主要介紹了python爬取亞馬遜書籍信息代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • python scatter散點圖用循環(huán)分類法加圖例

    python scatter散點圖用循環(huán)分類法加圖例

    這篇文章主要為大家詳細(xì)介紹了python scatter散點圖用循環(huán)分類法加圖例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python利用fitz庫提取pdf中的圖片

    Python利用fitz庫提取pdf中的圖片

    Fitz庫是一個Python圖像處理庫,主要用于打開、編輯和保存PDF、TIFF和JPEG格式的圖像,它可以幫助用戶讀取和寫入PDF文件,提取PDF頁面以及在頁面上進行標(biāo)記和注釋,本文主要介紹了如何通過Python的fitz庫提取pdf中的圖片,需要的朋友可以參考下
    2023-05-05
  • Python中time庫的使用(日期時間)

    Python中time庫的使用(日期時間)

    time庫是python中處理時間的標(biāo)準(zhǔn)庫,這篇文章主要介紹了Python中time庫的使用(日期時間),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    這篇文章主要介紹了OpenCV 圖像旋轉(zhuǎn)、平移、縮放,本文是 OpenCV圖像視覺入門之路的第7篇文章,本文詳細(xì)的進行了圖像的縮放 cv2.resize()、旋轉(zhuǎn) cv2.flip()、平移 cv2.warpAffine()等操作,需要的朋友可以參考下
    2022-12-12
  • Ubuntu下升級 python3.7.1流程備忘(推薦)

    Ubuntu下升級 python3.7.1流程備忘(推薦)

    這篇文章主要介紹了Ubuntu下升級 python3.7.1流程備忘,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • python異常處理之try finally不報錯的原因

    python異常處理之try finally不報錯的原因

    這篇文章主要介紹了python異常處理之try finally不報錯的原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論