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

Python生成器generator用法示例

 更新時間:2018年08月10日 11:40:37   作者:噴跑的豆子  
這篇文章主要介紹了Python生成器generator用法,結(jié)合實例形式分析了Python生成器generator常見操作技巧與相關(guān)注意事項,需要的朋友可以參考下

本文實例分析了Python生成器generator用法。分享給大家供大家參考,具體如下:

生成器generator本質(zhì)是一個函數(shù),它記住上一次在函數(shù)體中的位置,在生成器函數(shù)下一次調(diào)用,會自動找到該位置,局部變量都保持不變

l = [x * 2 for x in range(10)] # 列表生成式
g = (x * 2 for x in range(10))
print(l,g) # l打印的是一個列表,g則是一個generator的內(nèi)存地址

一次性打印獲取generator的所有元素:

for index in g:
  print(index)

逐步獲取generator的元素:

print(g.__next__())   # 0
print(g.__next__())   # 2
print(g.__next__())   # 4
print(g.__next__())   # 6
print(g.__next__())   # 8

yield關(guān)鍵字

通常我們做一個打印0-50的數(shù)時,會定義一個函數(shù),只要調(diào)用這個函數(shù),它就會自定打印0-50的數(shù)

def fib(num):
  n = 0
  while n < num:
    print(n)
    n+=1
fib(50)

其實我們只需要改動那么一丟丟,就可以將上面那個函數(shù)改變成一個generator

def fib(num):
  n = 0
  while n < num:
    yield n   # 在使用yield關(guān)鍵字時,需在前面先定義一個變量n
    n+=1
g = fib(50)   # 此時的g是一個generator

generator原理:通過某一種特定的算法,在一個特定的條件下,不斷向下推算,得出后續(xù)的元素。因為generator不必創(chuàng)建list,所以可以大大的節(jié)約內(nèi)存空間。舉個栗子:

def fib():
  print("step 1")
  yield 1
  print("step 2")
  yield 2
  print("step 3")
  yield 3
g = fib()
g.__next__()  # 結(jié)果:step 1
g.__next__()  # 結(jié)果:step 2
g.__next__()  # 結(jié)果:step 3

根據(jù)結(jié)果可以看出,每次執(zhí)行next(),都會打印一句,而遇到yield就直接跳出,并記錄位置,再次執(zhí)行next()時,會從記錄的那個位置開始往下執(zhí)行,再次遇到yield時跳出。

此時我們不經(jīng)會想,如果我們不斷的調(diào)用next(),該如何判斷是否已經(jīng)完畢,如果越界了,是否會報錯?

# -* coding:utf-8 -*-
#! python3
'''
Created on 2018年8月10日

@author: Administrator
'''
def fib(num):
  n = 0
  while n < num :
    yield n
    n+=1
g = fib(10)
while True:
  print(g.__next__())

執(zhí)行結(jié)果:

可以看出當遍歷完畢之后,如果在此調(diào)用next()將會報錯,我們是無法獲取到遍歷的下標的,那么我們該如何規(guī)避這個錯誤呢?對next()拋異常處理

def fib(num):
  n = 0
  while n < num :
    yield n
    n+=1
g = fib(10)
while True:
  try:
    print(g.__next__())
  except StopIteration:
    print("已經(jīng)完畢")
    break

此時將不再報錯,當越界的時候,系統(tǒng)會自動捕捉該異常,并且打印你想要輸出的信息

send方法

在單線程下實現(xiàn)一個簡單的并行效果

# -*- coding:utf-8 -*-
#! python3
'''
Created on 2018年8月10日

@author: Administrator
'''
import time
def startEat(name):
  print("%s準備開始吃包子了"%name)
  while True:
    b = yield
    print("%s被%s吃了"%(b,name))
def startMake():
  laowang = startEat("laowang")
  laowang.__next__()
  for index in range(10):
    time.sleep(1)
    print("已經(jīng)做好了包子%d號"%index)
    laowang.send("包子%d號"%index)
startMake()

執(zhí)行結(jié)果:

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python列表(list)操作技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

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

相關(guān)文章

  • python的rllib庫你了解嗎

    python的rllib庫你了解嗎

    這篇文章主要介紹了python urllib庫的使用,幫助大家更好的利用python學習爬蟲,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    Python干貨實戰(zhàn)之八音符醬小游戲全過程詳解

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實現(xiàn)一個八音符醬小游戲,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • Python使用random.shuffle()打亂列表順序的方法

    Python使用random.shuffle()打亂列表順序的方法

    今天小編就為大家分享一篇Python使用random.shuffle()打亂列表順序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • PyQt5+PyQt5Designer的安裝步驟

    PyQt5+PyQt5Designer的安裝步驟

    本文主要介紹了PyQt5+PyQt5Designer的安裝步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • python線程池的四種好處總結(jié)

    python線程池的四種好處總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python線程池的四種好處歸納內(nèi)容,有興趣的朋友們可以學習下。
    2021-04-04
  • 解決Python報錯問題[SSL:?SSLV3_ALERT_HANDSHAKE_FAILURE]

    解決Python報錯問題[SSL:?SSLV3_ALERT_HANDSHAKE_FAILURE]

    這篇文章主要介紹了解決Python報錯問題[SSL:?SSLV3_ALERT_HANDSHAKE_FAILURE],具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python 畫出來六維圖

    Python 畫出來六維圖

    這篇文章主要介紹了Python 畫出來六維圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python中生成Epoch的方法

    Python中生成Epoch的方法

    下面小編就為大家?guī)硪黄狿ython中生成Epoch的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 關(guān)于python字符串方法分類詳解

    關(guān)于python字符串方法分類詳解

    在本篇文章里小編給各位整理的是關(guān)于關(guān)于python字符串方法分類的知識點內(nèi)容,有興趣的朋友們學習下。
    2019-08-08
  • python繪制風場方向和大小quiver問題

    python繪制風場方向和大小quiver問題

    這篇文章主要介紹了python繪制風場方向和大小quiver問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

长寿区| 墨脱县| 军事| 新巴尔虎右旗| 寿宁县| 西盟| 高邮市| 大理市| 永清县| 清新县| 鄂托克旗| 鲁甸县| 中超| 漳州市| 阳东县| 方正县| 杭锦旗| 杨浦区| 湖州市| 乐安县| 荆州市| 鄱阳县| 拜城县| 大丰市| 昌黎县| 克拉玛依市| 乐亭县| 池州市| 定襄县| 三原县| 喀喇| 屏东县| 甘孜县| 盘锦市| 襄汾县| 沅陵县| 大丰市| 苍山县| 西藏| 平邑县| 蚌埠市|