[轉載] 【零基礎學爬蟲】python中的yield詳解

參考鏈接: 什么時候在Python中使用yield而不是return

python中的yield功能比較強大,什么意思呢?如果一個函數f內使用了yield關鍵詞,那么該函數就可以這樣使用:?

for item in f(***):

? ? ****

?

也就是包含yield關鍵詞的函數可以在for循環中迭代,說到迭代第一印象是包含很多個元素才可以迭代,確實如此。舉個更加詳細的案例: 需求::?

你需要產生一個按照特定規則增減的序列,比如最簡單的遞增序列:1,2,3…1000000,第一印象是可以把產生號的序列放到list中,使用的時候直接取值就好,但是這種做法有個致命的缺點,即需要預先存儲這些序列,這會耗費大量的內存,那么有沒有更好的方法呢??

這是yield出來拯救世界了:?

def getSeq(num):

? ? index = 1;

? ? while index<num:

? ? ? ?yield index

? ? ? ? index = index+1

?

調用方法:?

for i in getSeq(1000000):

? ? pass

?

上述代碼運行時,for中調用了getSeq,執行該函數時,遇到yield index時會將index的值返回,并且函數暫停在yield語句的位置,下次再調用getSequence時,將繼續從上次暫停的位置開始運行,直到遇到yield關鍵詞時又將index的值返回,一直這樣循環?

yield的作用也就是:當執行到yield關鍵詞的代碼時,函數會暫時返回,下次調用該函數時,會從上次暫停的地方繼續運行,yield起到一個暫時返回的作用,有點像return。?

另外,yield其實可以有返回值,也可以從外界改變yield的返回值:?

def getSeq(num):

? ? index = 1

? ? while index<num:

? ? ? ? res = yield index

? ? ? ? print('res = '+str(res)+'\n')

? ? ? ? index = index+1

for i in getSeq(3):

? ? print('i = '+str(i)+'\n')

?

輸出:?

?

?i=1 res = None i = 2 res = None?

?

上面打印出的res取值都是None,yield將index的值返回給調用方后,res賦的值為None,但是我們也可以從外界手動給res賦值?

def getSeq(num):

? ? index = 1

? ? while index<num:

? ? ? ? res = yield index

? ? ? ? print('res = '+str(res)+'\n')

? ? ? ? index = index+1

seq = getSeq(5)#

next(seq)

seq.send(1)

seq.send(2)

seq.send(3)

?

輸出:?

?

?res=1 res=2 res=3?

?

上述代碼先調用next(seq)主要是使getSeq函數暫停到yield語句的地方,暫停在yield語句后才能使用send方法給yield返回值賦值,否則會報錯。?

上述大概是yield關鍵詞的使用,總結:?

在執行seq = getSeq(5)的時候,函數并沒有執行,此時seq的類型是對象,更具體一點seq是生成器類型(generator)每個generator類型對象主要有兩個方法:send和next,next用來迭代,send用來給yield返回值賦值,默認情況下yield的返回值是None每一個send方法中隱式調用了next方法send方法是給yield表達式返回值賦值,所以函數必須暫停在yield代碼處的時候才能調用send方法(其實就是調用send方法前至少調用一次next方法)for i in getSeq 其實就是對generator進行迭代,和next方法類似?

?

掃描下方二維碼,及時獲取更多互聯網求職面經、java、python、爬蟲、大數據等技術,和海量資料分享:公眾號后臺回復“csdn”即可免費領取【csdn】和【百度文庫】下載服務;公眾號后臺回復“資料”:即可領取5T精品學習資料、java面試考點和java面經總結,以及幾十個java、大數據項目,資料很全,你想找的幾乎都有

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

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

相關文章

全新的membership框架Asp.net Identity(1)——.Net membership的歷史

在Asp.net上&#xff0c;微軟的membershop框架經歷了Asp.net membership到Asp.net simple membership&#xff0c;再到現在的Asp.net Identity. 每一次改變&#xff0c;都使得驗證框架更加的適應變化和可定制。這篇文章是Asp.net Identity系列的開篇&#xff0c;主要就membersh…

c語言100位整數變量聲明_C ++程序動態聲明一個整數變量并打印其內存地址

c語言100位整數變量聲明Here, we will learn how we can declare an integer variable dynamically and how to print address of declared memory block? 在這里&#xff0c;我們將學習如何動態聲明整數變量&#xff0c;以及如何打印聲明的內存塊的地址&#xff1f; In C pr…

[轉載] python 函數返回多個值

參考鏈接&#xff1a; 在Python中返回多個值 &#xff08;廖雪峰Python教程學習筆記&#xff09; 函數體內部的語句在執行時&#xff0c;一旦執行到return&#xff0c;函數就執行完畢&#xff0c;并將結果返回。 如果沒有return語句&#xff0c;函數執行完畢后也會返回結果…

二.編寫第一個c#程序(注釋,命名空間,類,Main方法,標識符,關鍵字,輸入,輸出語句,)...

復習編寫一個控制臺應用程序&#xff0c;目標是在控制臺輸出“Hello World” 1.第一步&#xff0c;打開Visual Studio 2012以上版本(我用的是VS 2015)&#xff0c;打開完成后出現以下界面 2.第二步&#xff0c;這時候就要新建一個解決方案了&#xff0c;創建解決方案可以直接點…

[轉載] Python中定義函數,循環語句,條件語句

參考鏈接&#xff1a; Python中的局部函數 由于日常程序流中主要是三種結構&#xff1a;順序&#xff0c;循環&#xff0c;條件&#xff0c;且往往需要自定義函數再調用&#xff0c; 因此今天想學習一下Python中關于定義函數、循環語句和條件語句的寫法。 1.定義函數 區…

node oauth2驗證_如何設置和使用護照OAuth Facebook身份驗證(第1部分)| Node.js

node oauth2驗證In my last articles, we looked at the implementation of the passport-local authentication strategy. We also looked at the various requirements to get started with the login form. 在上一篇文章中&#xff0c;我們介紹了護照本地身份驗證策略的實現…

vue2.0 引用qrcode.js實現獲取改變二維碼的樣式

vue代碼 <template><div class"qart"><div id"qrcode" ref"qrcode"></div><input type"text" id"getval" value"" placeholder"修改這個值改變二維碼"></div> <…

[轉載] Python列表排序 list.sort方法和內置函數sorted

參考鏈接&#xff1a; Python中的函數 Python列表排序 list.sort方法和內置函數sorted 很多時候我們獲取到一個列表后,這個列表并不滿足我們的需求,我們需要的是一個有特殊順序的列表. 這時候就可以使用list.sort方法和內置函數sorted,本文就是介紹list.sort方法和sorted內…

Java Thread類最終同步的void join(long time_in_ms)方法,帶有示例

線程類最終同步無效連接(long time_in_ms) (Thread Class final synchronized void join(long time_in_ms)) This method is available in package java.lang.Thread.join(long time_in_ms). 軟件包java.lang.Thread.join(long time_in_ms)中提供了此方法。 join(long time_in_…

RYU控制器安裝`

2019獨角獸企業重金招聘Python工程師標準>>> 同樣是參考了http://linton.tw/2014/02/11/note-how-to-set-up-ryu-controller-with-gui-component/的內容。 1. 由于Ubuntu中自帶有Python&#xff0c;因此直接開始安裝pip apt-get install python-pip apt-get i…

[轉載] mac開發者,你不得不知道的環境變更設置方法(如Java的環境變更 source命令 )

參考鏈接&#xff1a; 設置Java環境 Mac是基于Unix的&#xff0c;所有先來幾個常識與命令&#xff1a; Unix中雙引號單引號反引號(" )的區別 Unix中雙引號起到“弱引用”的作用:被引用的字符大部分被按照字符字面的意思解釋執行&#xff0c;除了了$,\,字符除外。 [因…

人形機器人正在美國史密森尼博物館中擔任導游的工作

Te article has been removed, please visit IncludeHelps home page for more articles 該文章已被刪除&#xff0c;請訪問IncludeHelp的主頁以獲取更多文章翻譯自: https://www.includehelp.com/News/a-humanoid-robot-is-doing-the-job-of-a-guide-in-the-smithsonian-museu…

normalizr API

APInormalizedenormalizeschemaArrayEntityObjectUnionValuesnormalize(data, schema)Normalizes input data per the schema definition provided. 根據提供的schema定義規范化輸入數據。data: required Input JSON (or plain JS object) data that needs normalization.schem…

[轉載] 【Java】基礎06:HelloWorld入門程序

參考鏈接&#xff1a; 從Hello World示例開始Java編程 HelloWorld它的中文意思是&#xff1a;“你好&#xff0c;世界”。 仿佛代表著計算機對世界說出來的第一句話&#xff0c;因為它簡潔實用&#xff0c;所以被作為入門程序廣泛使用。 Java程序開發三步驟&#xff1a;編…

[轉載] Java中的命名參數

參考鏈接&#xff1a; Java命名約定 創建具有許多參數的方法是一個主要的缺點。 每當需要創建這樣的方法時&#xff0c;就在空氣中聞一聞&#xff1a;這是代碼的味道。 強化單元測試&#xff0c;然后進行重構。 沒有借口&#xff0c;沒有屁股。 重構&#xff01; 使用構建器模…

[轉載] JVM(一):JVM體系結構詳解

參考鏈接&#xff1a; JVM如何工作–JVM體系結構 JVM簡介 JVM是Java程序得以運行的平臺&#xff0c;也是Java程序可以跨平臺的底層支撐&#xff0c;從整體上來看&#xff0c;JVM的主要功能可以分為加載和執行兩大塊。其中類加載器負責.class文件的尋址與加載&#xff0…

數據庫連接池的設計思路及java實現

2019獨角獸企業重金招聘Python工程師標準>>> connectionPool.DBConnectionManager [java] view plain copy package connectionPool; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; i…

[轉載] java虛擬機 jvm 出入java棧 棧空間內存分配

參考鏈接&#xff1a; Java虛擬機(JVM)堆棧區域 java棧空間是一塊線程私有的內存空間&#xff0c;java堆和程序數據密切相關&#xff0c;那么java棧就是和線程執行密切相關。線程最基本的執行行為就是函數的調用。每次函數調用其實是通過java棧傳遞數據的。 數據結構中的棧的…

SVN命令行更新代碼

命令列表 svn help查看幫助信息 Available subcommands: add auth blame (praise, annotate, ann) cat changeli…

[轉載] Java中Runtime的使用

參考鏈接&#xff1a; Java中的JVM的關閉掛鉤 1 JDK中Runtime的定義 http://blog.csdn.net/lysnow_oss/archive/2007/05/12/1606349.aspx <轉載> 那就首先說點Runtime類吧&#xff0c;他是一個與JVM運行時環境有關的類&#xff0c;這個類是Singleton的。我…