Python中yield關(guān)鍵字的理解與使用
在本文中,我們將介紹Python中的yield關(guān)鍵字。在開始之前,讓我們了解一下yield關(guān)鍵字的定義。
Python中yield關(guān)鍵字的語法:
def gen_func(x): for i in range(x): yield i
yield關(guān)鍵字有什么作用
yield關(guān)鍵字用于創(chuàng)建生成器函數(shù)。一種高效利用內(nèi)存的函數(shù)類型,可以像迭代器對象一樣使用。
通俗地說,yield關(guān)鍵字將把任何與它一起給出的表達式轉(zhuǎn)換為生成器對象,并將其返回給調(diào)用者。因此,如果希望獲得存儲在生成器對象中的值,則必須迭代生成器對象。
Python中return和yield的區(qū)別
Python中的yield關(guān)鍵字類似于用于返回值的return語句,它將生成器對象返回給調(diào)用包含yield的函數(shù)的人,而不是簡單地返回一個值。它們之間的主要區(qū)別是,return語句終止函數(shù)的執(zhí)行。而yield語句只暫停函數(shù)的執(zhí)行。另一個區(qū)別是return語句永遠不會執(zhí)行。而當(dāng)函數(shù)恢復(fù)其執(zhí)行時執(zhí)行yield語句。
yield優(yōu)點:
使用yield關(guān)鍵字是非常高效的,因為只有當(dāng)調(diào)用者遍歷對象時才會執(zhí)行。
當(dāng)變量狀態(tài)被保存時,我們可以從同一點暫停和恢復(fù),從而節(jié)省時間。
yield缺點:
有時,由于函數(shù)生成器多次返回值,因此很難理解代碼流。
必須正確處理生成器函數(shù)的調(diào)用,否則可能會導(dǎo)致程序錯誤。
示例1-Python中的Generator函數(shù)和yield關(guān)鍵字
生成器函數(shù)的行為與普通函數(shù)一樣,但具有一個定義特征。Python生成器函數(shù)使用yield關(guān)鍵字,而不是返回數(shù)據(jù)。生成器的主要好處是它們自動創(chuàng)建函數(shù)__iter__()和next()。生成器提供了一種非常整潔的技術(shù)來生成巨大或無限的數(shù)據(jù)。
def fun_generator(): yield "Hello world!!" yield "Geeksforgeeks" obj = fun_generator() print(type(obj)) print(next(obj)) print(next(obj))
輸出:
<class 'generator'>
Hello world!!
Geeksforgeeks
示例2-生成無限序列
在這里,我們使用yield生成一個無限序列,yield返回數(shù)字并將num遞增+ 1。
注意:這里我們可以觀察到num+=1在yield之后執(zhí)行,但是在return的情況下,在return關(guān)鍵字之后沒有執(zhí)行。
def inf_sequence(): num = 0 while True: yield num num += 1 for i in inf_sequence(): print(i, end=" ")
輸出:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96.......
示例3-在列表中使用yield
在這里,我們從列表中提取偶數(shù)。
# generator to print even numbers def print_even(test_list): for i in test_list: if i % 2 == 0: yield i # initializing list test_list = [1, 4, 5, 6, 7] # printing initial list print("The original list is : " + str(test_list)) # printing even numbers print("The even numbers in list are : ", end=" ") for j in print_even(test_list): print(j, end=" ")
?輸出:
The original list is : [1, 4, 5, 6, 7]
The even numbers in list are : 4 6
示例4-使用yield關(guān)鍵字作為布爾值
可能的實際應(yīng)用是,當(dāng)處理最后一個數(shù)據(jù)量并從中搜索細節(jié)時,可以使用yield,因為我們不需要從頭開始重新查找,從而保存時間。根據(jù)使用情況,可能存在許多yield應(yīng)用。 ?
# func to count number of given word def print_even(test_string): for i in test_string: if i == "geeks": yield i # initializing string test_string = " There are many geeks around you, \ geeks are known for teaching other geeks" # count numbers of geeks used in string count = 0 print("The number of geeks in string is : ", end="") test_string = test_string.split() for j in print_even(test_string): count = count + 1 print(count)
?輸出:
The number of geeks in string is: 3
到此這篇關(guān)于Python中yield關(guān)鍵字的理解與使用的文章就介紹到這了,更多相關(guān)Python yield關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于opencv實現(xiàn)簡單的數(shù)字識別
現(xiàn)在很多場景需要使用的數(shù)字識別,比如銀行卡識別,以及車牌識別等,在AI領(lǐng)域有很多圖像識別算法,大多是居于opencv 或者谷歌開源的tesseract 識別,下面這篇文章主要給大家介紹了關(guān)于如何基于opencv實現(xiàn)簡單的數(shù)字識別,需要的朋友可以參考下2021-09-09Python預(yù)測2020高考分數(shù)和錄取情況
這篇文章主要介紹了Python預(yù)測2020高考分數(shù)和錄取情況可能是這樣,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07python 列表遞歸求和、計數(shù)、求最大元素的實例
今天小編就為大家分享一篇python 列表遞歸求和、計數(shù)、求最大元素的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11python+requests接口自動化框架的實現(xiàn)
這篇文章主要介紹了python+requests接口自動化框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08python 讀寫、創(chuàng)建 文件的方法(必看)
下面小編就為大家?guī)硪黄猵ython 讀寫、創(chuàng)建 文件的方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09Python驅(qū)動ansys執(zhí)行apdl文件的代碼示例
在Python中驅(qū)動ANSYS執(zhí)行APDL(ANSYS Parametric Design Language)文件,可以通過使用subprocess模塊來調(diào)用ANSYS的可執(zhí)行文件,并傳遞APDL文件作為參數(shù),本文給大家介紹了一個詳細的代碼示例,需要的朋友可以參考下2024-11-11Django中url與path及re_path的區(qū)別說明
這篇文章主要介紹了Django中url與path及re_path的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03從零開始安裝Conda并搭建Python環(huán)境的全過程
conda是一個開源的包、環(huán)境管理器,可以用于在同一個機器上創(chuàng)建不同的虛擬環(huán)境,這篇文章主要介紹了安裝Conda并搭建Python環(huán)境的相關(guān)資料,需要的朋友可以參考下2025-04-04