python中的生成器send的作用(python中的生成器函數(shù))

    本文主要介紹python中的生成器函數(shù)s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我們可以通過列表生成器直接創(chuàng)建一個列表 但是 由于內(nèi)存限制 列表容量肯定是有限的 而且 創(chuàng)建一個包含100萬個元素的列表 不僅占用大量的存儲空間 如果我們只需要訪問前幾個元素 后面大部分元素占用的空間都會被浪費掉 那么 如果列表元素可以按照某種算法計算出來 我們是否可以在循環(huán)的過程中連續(xù)計算后續(xù)元素呢?這樣 就不需要創(chuàng)建一個完整的列表 從而節(jié)省了大量空間 在python中 這種邊循環(huán)邊計算的機制被稱為生成器 有許多方法可以創(chuàng)建一個生成器 第一種方法非常簡單 只要你把一個列表生成器的[]改為 你就創(chuàng)建了一個生成器:代碼演示:list_1 = (x*2 for x in range(10))比較生成器和列表生成的代碼演示導(dǎo)入時間start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 時間 打印(list_1)打印( list_1的運行時間是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2運行時為% s %(停止時間-開始時間)) 運行結(jié)果:生成器對象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔細觀察 我們可以看到fib函數(shù)實際上定義了斐波那契數(shù)列的計算規(guī)則 可以從第一個元素開始計算任何后續(xù)的元素 這個邏輯其實和生成器很像 換句話說 上面的函數(shù)和生成器只有一步之遙 要將fib函數(shù)轉(zhuǎn)換為生成器 只需將print(b)更改為yi: a b c = 0 1 0 while c sum: # print(b)yield b #這里的代碼執(zhí)行會跳出這個函數(shù) 使用next將b的值返回給代碼 其中a b = b a b c = 1# print(fib(6)) #這里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做點別的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二種生成器生成方法是定義 如果一個函數(shù)定義包含yield關(guān)鍵字 那么這個函數(shù)就不再是一個普通的函數(shù) 而是一個生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能傳遞給異常 g =纖維(3) 而tru: try: x =下一個(g)打印( ge: ; x)除了停止迭代作為:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能傳遞給異常 獲取返回值的也可以通過yield達到單線程情況下并發(fā)操作的效果:next和_ __next__:作用相同 只是用法不同 它們既可以喚醒yield 也可以接收yield傳遞的值 send:還可以喚醒yield 接收yield傳遞的值 而且還可以喚醒yield 傳遞一個值# _ * _ coding: utf-8 _ * _ #來實現(xiàn)生成器并發(fā)操作 進口timedef consum:打印%s準備吃包子了! % nam:包子= yield print( 包子[%s]來了 被[%s]吃了! %(包子 姓名))def produc: c =消費者(姓名)c2 =消費者( b )c. _ _下一個_ c2 _ _ n:時間 睡眠(1)打印( 做了2個饅頭! c .發(fā)送(i) c2 .發(fā)送(i)制作人( 飛某人 )標簽:發(fā)電機功能,下面一起看看python中的生成器函數(shù)s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我們可以通過列表生成器直接創(chuàng)建一個列表 但是 由于內(nèi)存限制 列表容量肯定是有限的 而且 創(chuàng)建一個包含100萬個元素的列表 不僅占用大量的存儲空間 如果我們只需要訪問前幾個元素 后面大部分元素占用的空間都會被浪費掉 那么 如果列表元素可以按照某種算法計算出來 我們是否可以在循環(huán)的過程中連續(xù)計算后續(xù)元素呢?這樣 就不需要創(chuàng)建一個完整的列表 從而節(jié)省了大量空間 在python中 這種邊循環(huán)邊計算的機制被稱為生成器 有許多方法可以創(chuàng)建一個生成器 第一種方法非常簡單 只要你把一個列表生成器的[]改為 你就創(chuàng)建了一個生成器:代碼演示:list_1 = (x*2 for x in range(10))比較生成器和列表生成的代碼演示導(dǎo)入時間start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 時間 打印(list_1)打印( list_1的運行時間是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2運行時為% s %(停止時間-開始時間)) 運行結(jié)果:生成器對象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔細觀察 我們可以看到fib函數(shù)實際上定義了斐波那契數(shù)列的計算規(guī)則 可以從第一個元素開始計算任何后續(xù)的元素 這個邏輯其實和生成器很像 換句話說 上面的函數(shù)和生成器只有一步之遙 要將fib函數(shù)轉(zhuǎn)換為生成器 只需將print(b)更改為yi: a b c = 0 1 0 while c sum: # print(b)yield b #這里的代碼執(zhí)行會跳出這個函數(shù) 使用next將b的值返回給代碼 其中a b = b a b c = 1# print(fib(6)) #這里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做點別的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二種生成器生成方法是定義 如果一個函數(shù)定義包含yield關(guān)鍵字 那么這個函數(shù)就不再是一個普通的函數(shù) 而是一個生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能傳遞給異常 g =纖維(3) 而tru: try: x =下一個(g)打印( ge: ; x)除了停止迭代作為:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能傳遞給異常 獲取返回值的也可以通過yield達到單線程情況下并發(fā)操作的效果:next和_ __next__:作用相同 只是用法不同 它們既可以喚醒yield 也可以接收yield傳遞的值 send:還可以喚醒yield 接收yield傳遞的值 而且還可以喚醒yield 傳遞一個值# _ * _ coding: utf-8 _ * _ #來實現(xiàn)生成器并發(fā)操作 進口timedef consum:打印%s準備吃包子了! % nam:包子= yield print( 包子[%s]來了 被[%s]吃了! %(包子 姓名))def produc: c =消費者(姓名)c2 =消費者( b )c. _ _下一個_ c2 _ _ n:時間 睡眠(1)打印( 做了2個饅頭! c .發(fā)送(i) c2 .發(fā)送(i)制作人( 飛某人 )標簽:發(fā)電機功能相關(guān)資訊。
    了解更多python中的生成器函數(shù)s: list _ 2中的list _ 2 = [] for x append (x * * 2) print (list _ 2)列表生成器:我們可以通過列表生成器直接創(chuàng)建一個列表 但是 由于內(nèi)存限制 列表容量肯定是有限的 而且 創(chuàng)建一個包含100萬個元素的列表 不僅占用大量的存儲空間 如果我們只需要訪問前幾個元素 后面大部分元素占用的空間都會被浪費掉 那么 如果列表元素可以按照某種算法計算出來 我們是否可以在循環(huán)的過程中連續(xù)計算后續(xù)元素呢?這樣 就不需要創(chuàng)建一個完整的列表 從而節(jié)省了大量空間 在python中 這種邊循環(huán)邊計算的機制被稱為生成器 有許多方法可以創(chuàng)建一個生成器 第一種方法非常簡單 只要你把一個列表生成器的[]改為 你就創(chuàng)建了一個生成器:代碼演示:list_1 = (x*2 for x in range(10))比較生成器和列表生成的代碼演示導(dǎo)入時間start _ time = time timelist _ 1 =(x * 2 for x in range(10))stop _ time = time 時間 打印(list_1)打印( list_1的運行時間是% s %(stop _ time-start _ time))start _ time = time . timelist _ 2 =[x * 2 for x in range(10)]stop _ time = time timeprint(list _ 2)print( list _ 2運行時為% s %(停止時間-開始時間)) 運行結(jié)果:生成器對象gen expr在0x0000011 facd1 : print(x)中x的生成器list _ 1 =(x * 2 for x in rang: a b c = 0 1 0而c sum: print(b)a b = b abc = 1 fib (6)仔細觀察 我們可以看到fib函數(shù)實際上定義了斐波那契數(shù)列的計算規(guī)則 可以從第一個元素開始計算任何后續(xù)的元素 這個邏輯其實和生成器很像 換句話說 上面的函數(shù)和生成器只有一步之遙 要將fib函數(shù)轉(zhuǎn)換為生成器 只需將print(b)更改為yi: a b c = 0 1 0 while c sum: # print(b)yield b #這里的代碼執(zhí)行會跳出這個函數(shù) 使用next將b的值返回給代碼 其中a b = b a b c = 1# print(fib(6)) #這里得到的是生成器p = fib (6) (下一步(p))打印(下一步(p))打印( 做點別的事情 )print(next(p))print(p(p))print(p . _ _ next _ _)第二種生成器生成方法是定義 如果一個函數(shù)定義包含yield關(guān)鍵字 那么這個函數(shù)就不再是一個普通的函數(shù) 而是一個生成器:f = fib(6)f generator object fib at 0x 104 f: a b c = 0 1 0而c sum:收益b a b = b a b c = 1返回 返回值只能傳遞給異常 g =纖維(3) 而tru: try: x =下一個(g)打印( ge: ; x)除了停止迭代作為:打印( 生成器返回值: ;: 1g: 1g echo 0-@ . c om2生成器返回valu:返回值只能傳遞給異常 獲取返回值的也可以通過yield達到單線程情況下并發(fā)操作的效果:next和_ __next__:作用相同 只是用法不同 它們既可以喚醒yield 也可以接收yield傳遞的值 send:還可以喚醒yield 接收yield傳遞的值 而且還可以喚醒yield 傳遞一個值# _ * _ coding: utf-8 _ * _ #來實現(xiàn)生成器并發(fā)操作 進口timedef consum:打印%s準備吃包子了! % nam:包子= yield print( 包子[%s]來了 被[%s]吃了! %(包子 姓名))def produc: c =消費者(姓名)c2 =消費者( b )c. _ _下一個_ c2 _ _ n:時間 睡眠(1)打印( 做了2個饅頭! c .發(fā)送(i) c2 .發(fā)送(i)制作人( 飛某人 )標簽:發(fā)電機功能相關(guān)內(nèi)容請關(guān)注本站點。

    win11激活碼大全(window11激活)
    筆記本電腦hdd可以裝ssd嗎
    tc安卓版ui怎么預(yù)覽,攝像機無法預(yù)覽UI請問如何才能讓攝像機看到UI
    怎么去除軟件廣告,怎樣關(guān)掉app里面的廣告
    戴爾安裝win10系統(tǒng)藍屏(戴爾電腦重裝系統(tǒng)藍屏怎么辦)
    python中的生成器send的作用(python中的生成器函數(shù))
    不玩游戲筆記本電腦推薦,不玩游戲到底買啥筆記本好用
    微信出現(xiàn)視頻號什么意思呀(微信出現(xiàn)視頻號是怎么回事)
    防止u盤中病毒的方式(防止u盤丟失的方法)
    win10激活工具操作教程圖解(win10激活工具操作教程圖片)
    臺式機電腦cpu性能排行,電腦的處理器排名
    榮耀7cpu怎么樣,榮耀7cpu 怎么樣
    中興u288免提怎么開
    5600xb560(5600x加1650)
    本地磁盤圖標異常修復(fù)(本地磁盤圖標顯示不正常)
    usb與電腦連接不上怎么回事(usb連接電腦沒反應(yīng)怎么辦)
    筆記本加固態(tài)硬盤的好處在哪,筆記本電腦換個固態(tài)硬盤有什么好處
    主板電源開關(guān)正負極(電腦開關(guān)正負極怎么接)
    蘋果12怎么關(guān)閉運行app(蘋果12手機關(guān)閉運行程序)
    阿里巴巴臺灣(阿里回應(yīng)退出臺灣)
    主站蜘蛛池模板: 久久久久久一区国产精品| 亚洲国产精品无码第一区二区三区 | 精品乱码一区二区三区四区| 国产一区二区三区在线观看免费| 亚洲一区二区三区日本久久九| 日本丰满少妇一区二区三区| 国模无码视频一区| 亚洲A∨精品一区二区三区下载| 久久精品国产一区二区三| 一区二区三区精品视频| 国产福利无码一区在线| 国产高清一区二区三区| 无码精品人妻一区二区三区人妻斩 | 精品亚洲综合在线第一区| 一区二区免费电影| 亚洲AV永久无码精品一区二区国产| 国产在线精品一区在线观看| 男插女高潮一区二区| 国产精品福利一区二区| 韩国一区二区视频| 麻豆一区二区免费播放网站| 亚洲中文字幕在线无码一区二区| 亚洲国产一区在线| 精品一区高潮喷吹在线播放| 99久久人妻精品免费一区| 中文字幕精品一区影音先锋 | 国产日韩一区二区三区| 日本免费一区二区在线观看| 日韩国产免费一区二区三区| 亚洲国产精品无码第一区二区三区| 亚洲高清毛片一区二区| 国产成人精品一区二区A片带套| 亚洲综合无码一区二区痴汉| 久久精品无码一区二区三区不卡 | 中文字幕在线视频一区| 国产一区二区中文字幕| 精品无码一区二区三区电影 | 国模无码人体一区二区| 无码aⅴ精品一区二区三区浪潮| 2018高清国产一区二区三区| 精品国产免费一区二区|