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

Python迭代器和生成器定義與用法示例

 更新時間:2018年02月10日 09:51:21   作者:ccorz  
這篇文章主要介紹了Python迭代器和生成器定義與用法,結(jié)合實(shí)例形式詳細(xì)分析了Python迭代器和生成器的概念、原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python迭代器和生成器定義與用法。分享給大家供大家參考,具體如下:

迭代器 iter()

迭代器是訪問集合中元素的一種方式,迭代器 object 從集合中的第一個元素開始訪問,直到所有的元素被訪問完成.

所以迭代器的特點(diǎn)是:只能往前,不能后退

迭代器的優(yōu)點(diǎn):不需要提前準(zhǔn)備整個迭代器中的所有元素,僅僅迭代到某個元素時才計(jì)算該元素,而之前或者之后,元素可以不存在或者銷毀.因?yàn)檫@個特點(diǎn),迭代器特別適合遍歷文件比較大或者無限的集合.

總結(jié)下迭代器 iter()的特點(diǎn)吧:

1.訪問者不需要關(guān)心迭代器內(nèi)部的結(jié)構(gòu),僅需通過next()方法不斷去取下一個內(nèi)容
2.不能隨機(jī)訪問集合中的某個值 ,只能從頭到尾依次訪問
3.訪問到一半時不能往回退
4.便于循環(huán)比較大的數(shù)據(jù)集合,節(jié)省內(nèi)存

**迭代器是用__next__()來取值的,來看個例子吧:

li=[1,2,3,4,56,78]
a=iter(li)
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__()) #取值到最后一個元素787
print(a.__next__())

輸出:

1
2
3
4
56
78
#開始報錯
Traceback (most recent call last):
 File "/Users/shane/PycharmProjects/Py_study/Base/S5/iter_test.py", line 14, in <module>
  print(a.__next__())
StopIteration

生成器generator

一個函數(shù)調(diào)用時返回一個迭代器,那這個函數(shù)就叫做生成器(generator);如果函數(shù)中包含yield語法,那這個函數(shù)就會變成生成器

yield是個什么鬼?yield 其實(shí)和函數(shù)中的 return 一樣,一樣的是都會返回定義好的值,但不同的是,return 是退出函數(shù),yield 只是暫停函數(shù)執(zhí)行,等待下一次迭代器取值

我們來看個例子:

def func():
  print(111)
  yield 1
  print(222)
  yield 2
  print(333)
  yield 3
ret=func()
r1=ret.__next__()
print(r1) #如果沒有 print,只會返回111

out:

111
1

一個典型的生成器的取值方式:

def func():
  print(111)
  yield 1
  print(222)
  yield 2
  print(333)
  yield 3
ret=func()
r1=ret.__next__()
print(r1)
r2=ret.__next__()
print(r2)
r3=ret.__next__()
print(r3)
r4=ret.__next__()  #如果沒有 r4就不會報錯,因?yàn)橐呀?jīng)沒值可取了
print(r4)

out:

Traceback (most recent call last):
 File "/Users/shane/PycharmProjects/Py_study/Base/S5/geno.py", line 21, in <module>
  r4=ret.__next__()
StopIteration
111
1
222
2
333
3

進(jìn)程已結(jié)束,退出代碼1

來看一個比較完整一點(diǎn)的生成器和迭代器吧:

def myrange(args):
  start=0
  while True:
    if start > args:
      return
    else:
      yield start
      start+=1
res=myrange(3)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 一文帶你了解Python中的枚舉(enum)

    一文帶你了解Python中的枚舉(enum)

    這篇文章一文帶你了解Python中的枚舉(enum),在Python中,枚舉和我們在對象中定義的類變量時一樣的,每一個類變量就是一個枚舉項(xiàng),需要的朋友可以參考下
    2023-04-04
  • 詳解Python中魔法方法的使用

    詳解Python中魔法方法的使用

    Python的魔法方法,也稱為dunder(雙下劃線)方法,是可以讓你對類添加“魔法”的特殊方法。本文主要來和大家聊聊魔法方法的使用,需要的可以參考一下
    2022-12-12
  • Python實(shí)現(xiàn)藍(lán)線挑戰(zhàn)特效的示例代碼

    Python實(shí)現(xiàn)藍(lán)線挑戰(zhàn)特效的示例代碼

    在抖音曾經(jīng)火了一陣子的藍(lán)線挑戰(zhàn)特效,其原理很簡單。本文將試著用opencv-python實(shí)現(xiàn)這個效果,做了攝像頭版本和視頻處理版本,感興趣的可以學(xué)習(xí)一下
    2022-10-10
  • Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Pillow,原名PIL(Python Imaging Library),是一個功能強(qiáng)大的Python圖像處理庫,支持多種格式,提供豐富的圖像操作功能,如旋轉(zhuǎn)、縮放、顏色轉(zhuǎn)換等,以及易于使用的API,Pillow支持廣泛的圖像文件格式,并提供圖像過濾、繪制等功能
    2024-09-09
  • django 解決擴(kuò)展自帶User表遇到的問題

    django 解決擴(kuò)展自帶User表遇到的問題

    這篇文章主要介紹了django 解決擴(kuò)展自帶User表遇到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 用Python讀取幾十萬行文本數(shù)據(jù)

    用Python讀取幾十萬行文本數(shù)據(jù)

    今天小編就為大家分享一篇關(guān)于用Python讀取幾十萬行文本數(shù)據(jù),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 基于Python實(shí)現(xiàn)通過微信搜索功能查看誰把你刪除了

    基于Python實(shí)現(xiàn)通過微信搜索功能查看誰把你刪除了

    這篇文章主要介紹了基于Python實(shí)現(xiàn)微信搜索查看誰把你刪除了的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Python入門之列表用法詳解

    Python入門之列表用法詳解

    列表是元素的集合,存儲在一個變量中。這篇文章主要為大家介紹一下Python中列表的定義與使用,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-09-09
  • 安裝出現(xiàn):Requirement?already?satisfied解決辦法

    安裝出現(xiàn):Requirement?already?satisfied解決辦法

    最近pip install的時候報錯,一大串Requirement already satisfied,所以下面這篇文章主要給大家介紹了關(guān)于安裝出現(xiàn):Requirement?already?satisfied的解決辦法,需要的朋友可以參考下
    2022-08-08
  • Python中的標(biāo)簽編碼和獨(dú)熱編碼示例詳解

    Python中的標(biāo)簽編碼和獨(dú)熱編碼示例詳解

    標(biāo)簽編碼是一種用于將分類列轉(zhuǎn)換為數(shù)值列的技術(shù),以便它們可以通過僅采用數(shù)值數(shù)據(jù)的機(jī)器學(xué)習(xí)模型進(jìn)行擬合,這篇文章主要介紹了Python中的標(biāo)簽編碼和獨(dú)熱編碼,需要的朋友可以參考下
    2023-07-07

最新評論