學習筆記(37):Python實戰編程-yield實現生成器

立即學習:https://edu.csdn.net/course/play/19711/255579?utm_source=blogtoedu

?1.yield = return + generator

yield是一個返回的是一個生成器對象,是通過next函數一次一次地進行函數地迭代來獲取結果的,而return函數則是將結果返回后,不再與函數有關系了

# #單步生成
#
def gererator():#由于yield的存在,使得這個函數是一個生成器print('[gererator]yield執行前')yield 'iterm = 1'#執行到這行代碼后,會將值返回,并且暫停在此,等待下一次next或者send函數的調用,再次從這里繼續運行,注意最后一定需要將結果返回,否則會報錯StopIteration,因為生成器本身就是一個迭代,停止了迭代就會報錯print('[gererator]yield執行后')def main():res = gererator()#獲取生成器對象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#運行生成器函數,打印返回的數據if __name__ == '__main__':main()
'''
<generator object gererator at 0x0000016197635930>
[gererator]yield執行前
iterm = 1'''# #錯誤的示例
def gererator():#由于yield的存在,使得這個函數是一個生成器print('[gererator]yield執行前')yield 'iterm = 1'#執行到這行代碼后,會將值返回,并且暫停在此,等待下一次next或者send函數的調用,再次從這里繼續運行,注意最后一定需要將結果返回,否則會報錯StopIteration,因為生成器本身就是一個迭代,停止了迭代就會報錯print('[gererator]yield執行后')def main():res = gererator()#獲取生成器對象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#運行生成器函數,打印返回的數據print(next(res))#再次打印,會報錯,因為上面一行代碼已經將yield運行結束了,所以會使得這行再次運行時,沒有返回,導致停止迭代,出錯print('*****************')if __name__ == '__main__':main()'''從運行的結果可以看出,兩次使用next函數,第一次運行函數,遇到yield停止,第二次繼續在yield處開始運行,但是因為沒有返回,所以代碼停在了生成器中,即停止了迭代,進而在main函數中的 print('*****************')代碼也沒有執行就直接報錯了<generator object gererator at 0x0000019059B95480>
Traceback (most recent call last):
[gererator]yield執行前File "C:/Users/jinlin/Desktop/python_further_study/基礎回顧(生成器、迭代器等)/生成器(yield).py", line 39, in <module>
iterm = 1main()
[gererator]yield執行后File "C:/Users/jinlin/Desktop/python_further_study/基礎回顧(生成器、迭代器等)/生成器(yield).py", line 35, in mainprint(next(res))#再次打印,會報錯,因為上面一行代碼已經將yield運行結束了,所以會使得這行再次運行時,沒有返回,導致停止迭代,出錯
StopIteration
'''# 錯誤的示例修正+send函數使用,send函數可以向生成器中發送數據,由yield接收
def gererator():#由于yield的存在,使得這個函數是一個生成器print('[gererator]yield執行前')res = yield 'iterm = 1'#執行到這行代碼后,會將值返回,并且暫停在此,等待下一次next或者send函數的調用,再次從這里繼續運行,注意最后一定需要將結果返回,否則會報錯StopIteration,因為生成器本身就是一個迭代,停止了迭代就會報錯print('[gererator]yield執行后')print('[generetor]%s'%res)yielddef main():res = gererator()#獲取生成器對象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#運行生成器函數,打印返回的數據res.send("【main】這是由send發送給生成器的數據")print('*****************')if __name__ == '__main__':main()'''
<generator object gererator at 0x0000021F62065480>
[gererator]yield執行前
iterm = 1
[gererator]yield執行后
[generetor]【main】這是由send發送給生成器的數據
*****************
'''import time
#指定迭代的最大次數,可以減少內存的占用
def gererator(maxnum):#由于yield的存在,使得這個函數是一個生成器for i in range(1,maxnum):print('************start*****************')yield ('迭代數據%s'%i)print('************end*****************\n\n')time.sleep(0.5)def main():for i in gererator(50):print(i)if __name__ == '__main__':main()
'''
************start*****************
迭代數據1
************end*****************************start*****************
迭代數據2
************end*****************************start*****************
迭代數據3
************end*****************************start*****************
迭代數據4
************end*****************************start*****************
迭代數據5
************end*****************************start*****************
迭代數據6
************end*****************************start*****************
迭代數據7
************end*****************************start*****************
迭代數據8
************end*****************************start*****************
迭代數據9
************end*****************************start*****************
迭代數據10
************end*****************
'''

?

2.yield from itermable:通過可迭代對象來構造生成器,可迭代對象一般有:列表、元組、生成器等

def iterator(n=101):#迭代器,生成一個列表,作為可迭代的對象a = []for i in range(1,n):a.append(i)return adef generator():#生成器,根據列表這個可迭代對象來創建生成器a_list = iterator()yield from a_listdef main():#從生成器中打印出數據for i in generator():print(i,end='、')if __name__ == '__main__':main()

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256895.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256895.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256895.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ie6、7 下input的邊框問題 ?

input的border設置為none,ie8及以上border都兼容&#xff0c;ie6和7的border還繼續存在&#xff0c;將border設為0時所有瀏覽器上都不存在了&#xff0c;但是border為0時還是會繼續的渲染。 將input的border設為"0 none",ie7及以上都正常了&#xff0c;但是ie6上inpu…

Mocha BSM產品亮點——關聯事件分析

業務需求與挑戰企業經常會遇到下列場景&#xff1a;? 企業某應用&#xff0c;例如&#xff0c;WebSphere Portal Server&#xff0c;已經不可用&#xff0c;是由于應用自身已不可用&#xff1f;還是應用所連接的數據庫出了問題&#xff1f;還是應用的LDAP服務不可用&#xff1…

輕量級文本編輯器,Notepad最佳替代品:Notepad++

目錄 正文之前1. 目的2. 原帖3. 為何推薦Notepad3.1. Notepad的一些基本特點3.2. notepad&#xff0c;notepad2&#xff0c;notepad&#xff0c;ultraEdit比較4. 使用Notepad前要了解的知識4.1. Notepad的名稱和縮寫4.2. Notepad修改設置后&#xff0c;立即生效4.3. Notepad的版…

學習筆記(38):Python實戰編程-窗體顯示

立即學習:https://edu.csdn.net/course/play/19711/343100?utm_sourceblogtoedu GUI&#xff1a;圖形用戶接口——GUI組件&#xff0c;組件定義&#xff0c;組件布局管理 主體窗口的設置&#xff1a; import tkinter#導入創建窗體的相關模塊class Mainwindow():#創建窗口類de…

Tomcat 配置和spring-framework MVC配置簡介

Tomcat啟動時&#xff0c;先找系統變量CATALINA_BASE&#xff0c;如果沒有&#xff0c;則找CATALINA_HOME。然后找這個變量所指的目錄下的conf文件夾&#xff0c;從中讀取配置文件。最重要的配置文件&#xff1a;server.xml 。要配置tomcat&#xff0c;基本上了解server.xml&am…

SDL 庫 無法解析的外部符號 __imp__fprintf

VS2015 在鏈接器-》命令行 里加入legacy_stdio_definitions.lib 另外一個常見錯誤關于stderr的用 extern "C" { FILE __iob_func[3] { *stdin,*stdout,*stderr }; }轉載于:https://www.cnblogs.com/zhaogaojian/p/5646885.html

ultra edit ftp帳號管理導入導出方法

在更換電腦或ultra edit新安裝時往往需要將原來使用的ftp帳號導入過來&#xff0c;可以在高級-備份/恢復用戶定制-選中其他保存備份&#xff0c;拷貝出來然后再導入。 也可以在配置-ftp/sftp中保存&#xff0c;拷貝出來然后在安裝好后配置。 步驟1. 導出ftp帳號信息&#xff1a…

學習筆記(39):Python實戰編程-標簽

立即學習:https://edu.csdn.net/course/play/19711/343101?utm_sourceblogtoedu 標簽——文字標簽和圖片標簽 1.文字標簽 關鍵代碼&#xff1a; label_text tkinter.Label(root,text linlianqin.com, width "20",height "10",font (楷體,20),bg #1…

散列沖突與作為特征值的散列

緣起 寫這篇文章&#xff0c;源于這么一個問題&#xff1a;假設目前有一千萬個URL訪問記錄&#xff0c;請統計最熱門的10個查詢串。(見此文)。見到這個問題的第一想法使用hash解決&#xff0c;沒考慮hash沖突解決的問題(其實就沒想比較URL&#xff0c;不比較URL無法判斷沖突與否…

C++:getenv setenv -- 獲取設置系統環境變量

C&#xff1a;getenv & setenv -- 獲取&設置系統環境變量 1. getenv&#xff1a;取得環境變量內容 頭文件- #include<stdlib.h> 格式&#xff1a; char * getenv(const char *name); 意義&#xff1a; getenv()用來取得參數name環境變量的內容。 param name為環…

CSS單位和值

顏色值 在網頁中的顏色設置是非常重要&#xff0c;有字體顏色&#xff08;color&#xff09;、背景顏色&#xff08;background-color&#xff09;、邊框顏色&#xff08;border&#xff09;等&#xff0c;設置顏色的方法也有很多種&#xff1a; 1、英文命令顏色 前面幾個小節中…

學習筆記(40):Python實戰編程-文本

立即學習:https://edu.csdn.net/course/play/19711/343102?utm_sourceblogtoedu 文本——人機交互&#xff0c;文本輸入的地方&#xff08;tkinter.Text&#xff08;“需要顯示的文本”&#xff0c;屬性的設置&#xff09;組件類&#xff09; 知識點&#xff1a; 文本輸入 文…

嵌入式linux的調試技術

本章介紹了嵌入式linux的調試技術&#xff0c;例如&#xff0c;設置斷點、逐步跟蹤代碼、輸出調試信息等。 Printk函數用于打印內核調試信息&#xff0c;運行在內核空間&#xff0c;printf函數運行在用戶空間。Printk文件是一個簡單的有4個數字組成的文本文件。 雖然使用Printk…

constexpr的好處

constexpr的好處&#xff1a; 是一種很強的約束&#xff0c;更好地保證程序的正確語義不被破壞。編譯器可以在編譯期對constexpr的代碼進行非常大的優化&#xff0c;比如將用到的constexpr表達式都直接替換成最終結果等。相比宏來說&#xff0c;沒有額外的開銷&#xff0c;但更…

PHP中include()與require()的區別說明

123456789101112131415161718192021222324252627require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前面&#xff0c;PHP 程序在執行前&#xff0c;就會先讀入 require 所指定引入的文件&#xff0c;使它變成 PHP 程序網頁的一部份…

電腦重裝系統重裝不了,老是藍屏,是不是硬盤燒壞了!

藍屏代碼是什么啊裝不了有時候是內存的問題以下內容為百度知道Ctangel個人總結&#xff0c;并非網絡復制&#xff0c;全是個人日常工作中遇到并且明確確定原因的。如需復制請注明出處。這里列舉幾個典型的藍屏故障的原因和解決辦法。一、0X0000000A 這個藍屏代碼和硬件無關&…

學習筆記(41):Python實戰編程-按鈕

立即學習:https://edu.csdn.net/course/play/19711/343103?utm_sourceblogtoedu 按鈕——用于指令的提交作用&#xff0c;如將文本中輸入的信息進行提交等 button tkinter.Button(root,text linlianqin,image photo,compound bottom) 創建了一個圖片按鈕&#xff0c;并且…

第八章讀后感

一&#xff0e;Linux驅動的代碼重用有很多的方法&#xff0c;可以采用標準的C程序的方法將要重用的代碼放在其他的文件&#xff08;在頭文件中聲明&#xff09;中。如果要使用某些功能&#xff0c;include相應的頭文件即可&#xff0c;也可以是另外一種動態重用的方式&#xff…

linux系統基礎優化小結

不用root&#xff0c; 添加普通用戶&#xff0c;通過sudo授權管理 更改默認的遠程ssh服務端口及禁止root用戶遠程登陸 定時自動更新服務器時間 ntpdate 配置yum更新源&#xff0c;從國內更新源下載安裝軟件&#xff0c;如啊里云&#xff0c;163等.http://mirrors.aliyun.com…

iOS8 【xcode6中添加pch全局引用文件】

前沿&#xff1a;xcode6中去掉了pch&#xff0c;為了一些瑣碎的頭文件引用&#xff0c;加快了 編譯速度&#xff01; xcode6之前的版本建項目就自動添加了是這樣的&#xff1a;xcode6后的版本要自己手動的添加步驟如下&#xff1a;1&#xff09; 2)3&#xff09; $(SRCROOT)/pc…