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

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

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

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

迭代器 iter()

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

所以迭代器的特點是:只能往前,不能后退

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

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

1.訪問者不需要關心迭代器內(nèi)部的結(jié)構(gòu),僅需通過next()方法不斷去取下一個內(nèi)容
2.不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問
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ù)中的 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就不會報錯,因為已經(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

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

來看一個比較完整一點的生成器和迭代器吧:

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)

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

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • 詳解如何減少python內(nèi)存的消耗

    詳解如何減少python內(nèi)存的消耗

    這篇文章主要介紹了詳解如何減少python內(nèi)存的消耗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python matplotlib庫繪制散點圖例題解析

    python matplotlib庫繪制散點圖例題解析

    這篇文章主要介紹了python matplotlib庫繪制散點圖例題解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python 字符串詳解

    python 字符串詳解

    這篇文章主要介紹了Python的字符串,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • PyQt5每天必學之創(chuàng)建窗口居中效果

    PyQt5每天必學之創(chuàng)建窗口居中效果

    這篇文章主要介紹了PyQt5每天必學之創(chuàng)建窗口居中效果,使應用程序窗口顯示在屏幕的中心,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python爬蟲之Selenium鼠標事件的實現(xiàn)

    Python爬蟲之Selenium鼠標事件的實現(xiàn)

    這篇文章主要介紹了Python爬蟲之Selenium鼠標事件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • python程序主動退出進程的五種方式

    python程序主動退出進程的五種方式

    對于如何結(jié)束一個Python程序或者用Python操作去結(jié)束一個進程等,Python本身給出了好幾種方法,而這些方式也存在著一些區(qū)別,對相關的幾種方法看了并實踐了下,同時也記錄下,需要的朋友可以參考下
    2024-02-02
  • Python實戰(zhàn)之ATM取款機的實現(xiàn)

    Python實戰(zhàn)之ATM取款機的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Python語言模擬實現(xiàn)ATM取款機功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-09-09
  • 使用npy轉(zhuǎn)image圖像并保存的實例

    使用npy轉(zhuǎn)image圖像并保存的實例

    這篇文章主要介紹了使用npy轉(zhuǎn)image圖像并保存的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python實現(xiàn)列表的排序方法分享

    python實現(xiàn)列表的排序方法分享

    在本篇文章里小編給大家分享了關于python實現(xiàn)列表的排序方法以及相關知識點,有興趣的朋友們可以學習下。
    2019-07-07
  • python自動化測試Data?Driven?Testing(DDT)用例解析

    python自動化測試Data?Driven?Testing(DDT)用例解析

    這篇文章主要為大家介紹了python自動化測試Data?Driven?Testing(DDT)用例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論

宁津县| 页游| 麟游县| 汾阳市| 昌乐县| 平舆县| 宣威市| 峨眉山市| 斗六市| 亚东县| 叙永县| 瑞金市| 扶沟县| 太保市| 莱西市| 陵川县| 比如县| 辛集市| 夏津县| 珠海市| 瑞丽市| 白水县| 廊坊市| 昌平区| 大城县| 黑河市| 麻栗坡县| 葵青区| 潍坊市| 长治市| 基隆市| 会泽县| 上蔡县| 苏尼特左旗| 五莲县| 舞阳县| 淅川县| 康保县| 工布江达县| 蒲江县| 开鲁县|