最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python迭代器iterator生成器generator使用解析

 更新時(shí)間:2019年10月24日 11:49:41   作者:snailon  
這篇文章主要介紹了Python迭代器iterator生成器generator使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1. 迭代

根據(jù)記錄的前面的元素的位置信息 去訪問后續(xù)的元素的過程 -遍歷 迭代

2. 可迭代對象 iterable

如何判斷可迭代對象的3種方式

  • 能夠被迭代訪問的對象 for in
  • 常用可迭代對象-list tuple str
  • from collections import Iterable
  • isinstance(obj, Iterable)

3. 可迭代對象

可迭代對象通過__iter__方法提供一個(gè) 可以遍歷對象中數(shù)據(jù)的工具-迭代器

iter(可迭代對象) 可以獲取可迭代對象的迭代器

通過迭代器可以迭代訪問 數(shù)據(jù)

next(迭代器) ===== 迭代器對象.__next__()

可迭代對象的本質(zhì) 提供了一個(gè)迭代器(遍歷可迭代對象中的數(shù)據(jù))

如何獲取可迭代對象中的迭代器 迭代器對象 = iter(可迭代對象)

如果通過迭代器訪問可迭代對象中下一個(gè)元素 元素的值 = next(迭代器對象)

如果迭代器遍歷完成 拋出 停止迭代-異常StopIteration

如果需要實(shí)現(xiàn)一個(gè)迭代器 就需要實(shí)現(xiàn)__next__()

4. 迭代器 iterator

-- 迭代器訪問可迭代對象中數(shù)據(jù) 判斷對象是否是迭代器類型

from collections import Iterator
isinstance(obj, Iterator)

自己實(shí)現(xiàn)

迭代器本身也是可迭代對象 __iter__() 提供迭代器(self)

下一個(gè)元素的值 = next(迭代器) =====> __next__()

實(shí)現(xiàn)一個(gè)可迭代對象

from collections import Iterable
from collections import Iterator
import time


class MylistIterator(object):
  """這是Mylist類型的對應(yīng)迭代器類型 """
  def __init__(self,data):
    # 需要被便利的數(shù)據(jù)
    self.data = data
    # 保存用戶訪問的位置
    self.index = 0

  def __iter__(self):
    """python規(guī)定 迭代器是一種可迭代對象"""
    return self

  def __next__(self):
    """next(ml_iterator) 相當(dāng)于調(diào)用迭代器對象的.__next__()"""
    if self.index < len(self.data):
      ret = self.data[self.index]
      self.index += 1
      return ret
    else:
      # 訪問完成 應(yīng)該拋出異常
      raise StopIteration

class Mylist(object):
  """可迭代對象"""
  def __init__(self):
    self.data = [1,2,3,4,5]

  def __iter__(self):
    """提供迭代器"""
    # 返回迭代器對象
    mliter = MylistIterator(self.data)
    return mliter

# ml是一個(gè)可迭代類型
ml = Mylist()

# 獲取可迭代對象的 迭代器對象
ml_iter = iter(ml)
print(isinstance(ml_iter, Iterator))
for i in ml:
  print(i)
  time.sleep(1)

"""
1 可迭代對象的本質(zhì) 提供了一個(gè)迭代器(遍歷可迭代對象中的數(shù)據(jù))

2 如何獲取可迭代對象中的迭代器 迭代器對象 = iter(可迭代對象)
    實(shí)際上相當(dāng)于 可迭代對象.__iter__()
3 如果通過迭代器訪問可迭代對象中下一個(gè)元素 元素的值?。健ext(迭代器對象)
                  如果迭代器遍歷完成 拋出 停止迭代-異常StopIteration
"""
print(isinstance(ml, Iterable))

用迭代器完成斐波那契數(shù)列(難點(diǎn)在next)

"""兔子隊(duì)列 某一項(xiàng)的值是前兩項(xiàng)的和
1 1 2 3 5 8
"""

class Fib(object):
  def __init__(self,n):
    """初始化操作"""
    # n代表數(shù)列的長度
    self.n = n

    # 下標(biāo)記錄
    self.index = 0

    self.number1 = 0
    self.number2 = 1

  def __iter__(self):
    return self

  def __next__(self):
    """next(迭代器)  === .__next__()"""
    if self.index < self.n:
      ret = self.number1
      self.number1,self.number2 = self.number2,self.number2+self.number1
      self.index += 1
      return ret
    else:
      raise StopIteration

# list() tuple()都可以接收迭代器 并且將遍歷到的數(shù)據(jù)存儲(chǔ)到集合中
print(list(Fib(10)))
#
# # 打印斐波那契數(shù)列的前10項(xiàng)的值
# # for i in Fib(10):
# #   print(i)
# # 1 通過iter函數(shù)獲取可迭代對象 Iterable 的迭代器 iterator
# ml_iterator = iter(Fib(1000))
#
# # 2 在循環(huán)內(nèi)部不斷調(diào)用next(迭代器) 獲取下一個(gè)元素的值
# # 3 如果迭代完成 會(huì)拋出一個(gè)停止迭代的異常StopIteration

5. 生成器 generator

生成器是一種特殊的迭代器 --- 是迭代器, 并且有自己的特點(diǎn)

1 創(chuàng)建生成器表達(dá)式 [] ----》 (x for x in range(100))

2 生成器函數(shù)

凡是有yield關(guān)鍵字的函數(shù)都不是普通函數(shù)了 而是生成器函數(shù)

# 列表推導(dǎo)式
lis=[x for x in range(10)]
print(lis)

# 生成器表達(dá)式 中括號變圓括號
data=(x for x in range(10))
print(data)
# 遍歷data
for i in data:
  print(i)

結(jié)果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<generator object <genexpr> at 0x02AE7120>
1
3
5
7
9

6. yield關(guān)鍵字的作用

掛起當(dāng)前函數(shù) 將后面表達(dá)式的值 返回到調(diào)用生成器的地方

接收數(shù)據(jù) 并喚醒當(dāng)前函數(shù) 并且緊接著上次運(yùn)行的地址繼續(xù)執(zhí)行

7. 喚醒生成器的兩種方式

生成器.send("數(shù)據(jù)")

next(生成器) === 生成器.send(None)

在第一次調(diào)用生成器對象的是 必須使用next()

在后續(xù)的情況下 send和next可以混用

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

相關(guān)文章

  • Python3.5基礎(chǔ)之變量、數(shù)據(jù)結(jié)構(gòu)、條件和循環(huán)語句、break與continue語句實(shí)例詳解

    Python3.5基礎(chǔ)之變量、數(shù)據(jù)結(jié)構(gòu)、條件和循環(huán)語句、break與continue語句實(shí)例詳解

    這篇文章主要介紹了Python3.5基礎(chǔ)之變量、數(shù)據(jù)結(jié)構(gòu)、條件和循環(huán)語句、break與continue語句,結(jié)合實(shí)例形式詳細(xì)分析Python3.5編程入門相關(guān)的變量、數(shù)據(jù)結(jié)構(gòu)、常用條件與循環(huán)語句操作技巧及注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • 利用Django模版生成樹狀結(jié)構(gòu)實(shí)例代碼

    利用Django模版生成樹狀結(jié)構(gòu)實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于利用Django模版生成樹狀結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python神經(jīng)網(wǎng)絡(luò)Keras構(gòu)建CNN網(wǎng)絡(luò)訓(xùn)練

    python神經(jīng)網(wǎng)絡(luò)Keras構(gòu)建CNN網(wǎng)絡(luò)訓(xùn)練

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)使用Keras構(gòu)建CNN網(wǎng)絡(luò)訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python動(dòng)態(tài)可視化模塊Pynimate初體驗(yàn)

    Python動(dòng)態(tài)可視化模塊Pynimate初體驗(yàn)

    Pynimate是python第三方用于動(dòng)態(tài)可視化的數(shù)據(jù)模塊,是一位專攻?Python?語言的程序員開發(fā)的安裝包。本文將通過幾個(gè)簡單的示例,講解一下Pynimate的使用方法,需要的可以參考一下
    2023-02-02
  • Python判斷空的五種方法

    Python判斷空的五種方法

    本文介紹了多種在Python中判斷變量是否為空的方法,包括if語句、len()函數(shù)、not關(guān)鍵字、bool()函數(shù)和try...except語句等,具有一檔的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • python GUI庫圖形界面開發(fā)之PyQt5滾動(dòng)條控件QScrollBar詳細(xì)使用方法與實(shí)例

    python GUI庫圖形界面開發(fā)之PyQt5滾動(dòng)條控件QScrollBar詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5滾動(dòng)條控件QScrollBar詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • python3+PyQt5實(shí)現(xiàn)自定義流體混合窗口部件

    python3+PyQt5實(shí)現(xiàn)自定義流體混合窗口部件

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)自定義流體混合窗口部件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 徹底解決Python包下載慢問題

    徹底解決Python包下載慢問題

    這篇文章主要介紹了徹底解決Python包下載慢問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python從入門到精通之類的使用詳解

    Python從入門到精通之類的使用詳解

    Python是一種功能強(qiáng)大且廣泛使用的編程語言,它支持面向?qū)ο缶幊蹋∣OP),本文將介紹Python中類的使用,包括類的創(chuàng)建、屬性和方法的定義、繼承和多態(tài)等關(guān)鍵技術(shù)點(diǎn),希望對大家有所幫助
    2023-07-07
  • pycharm配置QtDesigner的超詳細(xì)方法

    pycharm配置QtDesigner的超詳細(xì)方法

    這篇文章主要介紹了pycharm配置QtDesigner的超詳細(xì)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01

最新評論

双柏县| 土默特左旗| 祁门县| 上思县| 永修县| 保定市| 皋兰县| 临桂县| 永济市| 边坝县| 锦州市| 霸州市| 邵东县| 彰化市| 安丘市| 布拖县| 且末县| 略阳县| 阿拉善右旗| 竹溪县| 揭阳市| 年辖:市辖区| 武威市| 射阳县| 新竹市| 新巴尔虎右旗| 梅州市| 博白县| 长岛县| 霍州市| 军事| 抚宁县| 迁安市| 威远县| 区。| 黎城县| 裕民县| 喜德县| 开封市| 黄冈市| 海安县|