導航:首頁 > 編程語言 > pythonyield函數

pythonyield函數

發布時間:2022-09-10 04:55:14

python中yield的用法問題

yield就是保存當前程序執行狀態。
你用for循環的時候,每次取一個元素的時候就會計算一次。
用yield的函數叫generator,和iterator一樣,它的好處是不用一次計算所有元素,而是用一次算一次,可以節省很多空間。generator每次計算需要上一次計算結果,所以用yield,否則一return,上次計算結果就沒了。
所以保存列表的說法是完全錯誤的。

② python中yield是什麼意思

一個帶有 yield 的函數就是一個 generator,它和普通函數不同,生成一個 generator 看起來像函數調用,但不會執行任何函數代碼,直到對其調用 next()(在 for 循環中會自動調用 next())才開始執行。雖然執行流程仍按函數的流程執行,但每執行到一個 yield 語句就會中斷,並返回一個迭代值,下次執行時從 yield 的下一個語句繼續執行。看起來就好像一個函數在正常執行的過程中被 yield 中斷了數次,每次中斷都會通過 yield 返回當前的迭代值。

具體,請參考下以下資料:
http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

③ python 怎麼用yield 返回一個列表

yield
yield是用於生成器。什麼是生成器,你可以通俗的認為,在一個函數中,使用了yield來代替return的位置的函數,就是生成器。它不同於函數的使用方法是:函數使用return來進行返回值,每調用一次,返回一個新加工好的數據返回給你

④ python yield怎麼實現的

yield是生成器關鍵詞,是在函數內使用的生成器語法(你也可以理解為是用在函數內的創建生成器的方法),讓函數返回的是一個生成器而不再返回函數計算得到的結果。比如:

同樣的迭代完再迭代則會報錯

⑤ 關於python中yield函數

next()一次執行一次,並不一次性執行完,是個itertator.也可以通過for來執行

⑥ python 函數里明明有yield和yield from,為什麼審查出來都是function不是generator不是應該是生成器嗎

概念混淆了,函數返回的是一個generator,不是說函數變成了generator。

你輸入的是gen、gen2,沒有調用函數,它的類型就是函數。

gen()

gen2()

調用之後,返回的才是generator

⑦ 再問一個python函數的白痴問題,關於yield的

Python2.5以前,Python yield是一個語句,但現在2.5中,yield是一個表達式(Expression),比如:

m=yield5

表達式(yield 5)的返回值將賦值給m,所以,認為 m = 5 是錯誤的。那麼如何獲取(yield 5)的返回值呢?需要用send(msg)方法。

其實next()和send()在一定意義上作用是相似的,區別是send()可以傳遞yield表達式的值進去,而next()不能傳遞特定的值,只能傳遞None進去。因此,我們可以看做c.next() 和 c.send(None) 作用是一樣的。

⑧ python中yield和return有什麼區別

yield
yield是用於生成器。什麼是生成器,你可以通俗的認為,在一個函數中,使用了yield來代替return的位置的函數,就是生成器。它不同於函數的使用方法是:函數使用return來進行返回值,每調用一次,返回一個新加工好的數據返回給你;yield不同,它會在調用生成器的時候,把數據生成object,然後當你需要用的時候,要用next()方法來取,同時不可逆。你可以通俗的叫它"輪轉容器",可用現實的一種實物來理解:水車,先yield來裝入數據、產出generator object、使用next()來釋放;好比水車轉動後,車輪上的水槽裝入水,隨著輪子轉動,被轉到下面的水槽就能將水送入水道中流入田裡。
def func3():
for i in range(1,5):
yield i#裝入
gob = func3()#generator 類型
print next(gob)#1 釋放的第一個裝入的數據,(先入先出)
print next(gob)#2
print next(gob)#3
print next(gob)#4
print next(gob)#報錯
復制代碼
return
這個大家都知道了,一句話,return既可以終止函數的執行,也可以返回函數加工處理好的數據,只是這個數據需要一個載體來進行保存,通常是變數。非條件判斷的時候,只要遇見return,函數就結束執行。

⑨ python中print,return和yield的區別

三個之間毛關系都沒。。。
print就是把對象的內容,輸出到標准輸出。。
return,就是函數的返回,表示把return 後面的內容,返回給調用這個函數的函數,或者說返回到函數調用點。
yield,python中生成器的必須關鍵字。。一般函數是一次執行然後返回,加入這個yield後,函數調用一次,只會執行到yield然後返回,下次調用再繼續這個關鍵字後面的內容,直到下一個yield或者函數結束。

⑩ python中return和yield怎麼用的兩個有什麼區別

常看到別人使用或討論yield語法,能搜到的中文解釋卻不多,今天決心搞定yield,把暫時的理解貼到這里.

搞定yield之前: 疊代器(iterator)

發現yield: 生成器(constructor)

使用yield: 遞歸調用

1. iterator

疊代器最簡單例子應該是數組下標了,且看下面的c++代碼:

int array[10];

for ( int i = 0; i < 10; i++ )

printf("%d ", array[i]);

疊代器工作在一個容器里(array[10]),它按一定順序(i++)從容器里取出值(array[i])並進行操作(printf("%d ", array[i])。

上面的代碼翻譯成python:

array = [i for i in range(10)]

for i in array:

print i,

for i in array幹了什麼(別亂想)?首先,array作為一個list是個容器,其次list這個內建類型有默認的next行為,python發現這些之後采 取的秘密的沒被各位看到的動作是:拿出array這丫容器的疊代器,從裡面next一下把值給i供for循環主體處置,for把這個值print了。

現在的問題是數據可以做容器疊代,代碼可以嗎?

怎麼不行,碗碟可以用來放菜,wk們不就聯想出用nt盛嗎,當然我們的yield不會那麼yellow + bt

2. constructor

怎麼把函數變成constructor? 在函數體里有yield就行了!

def gen():
print 'enter'
yield 1
print 'next'
yield 2
print 'next again'

for i in gen():
print i

各位!python看到gen函數里出現yield,知道可以用next了,問題是怎麼對代碼這個容器玩next?

從容器里拿到iterator的時候它還什麼也不是,處在容器入口處,對於數組來說就是下標為-1的地方,對於函數來說就是函數入口嘛事沒干,但是萬事俱備就欠next。

開始for i in g,next讓itreator爬行到yield語句存在的地方並返回值,

再次next就再爬到下一個yield語句存在的地方並返回值,依次這樣直到函數返回(容器盡頭)。
您一定看出來上面代碼的輸出是:

enter
1
next
2
next again

如果沒看出來請不要往下看了免得反被yield搞定。

3. 使用yield

yield的代碼疊代能力不但能打斷函數執行還能記下斷點處的數據,下次next書接上回,這正是遞歸函數需要的。

例如中序遍歷二叉樹:

(應該是David Mertz寫的)

def inorder(t):
if t:
for x in inorder(t.left):
yield x
yield t.label
for x in inorder(t.right):
yield x

for n in inorder(tree)

print n

當然yield這種代碼next的能力還可以用在其它方面,發現拍案的在貼咯。

閱讀全文

與pythonyield函數相關的資料

熱點內容
美食博主用什麼app拍視頻 瀏覽:812
ipone手機如何加密微信 瀏覽:354
自來水加密閥閥帽 瀏覽:431
華為交換機dhcp配置命令 瀏覽:315
androidbitmap縮小 瀏覽:271
單片機串口控制燈 瀏覽:84
大訊雲伺服器安裝視頻 瀏覽:784
華為演算法領先世界 瀏覽:654
linux路由重啟 瀏覽:566
php的模板編程 瀏覽:322
編譯器原理與實現書 瀏覽:710
dos選擇命令 瀏覽:18
apm固件編譯到單片機 瀏覽:122
聯通深藍卡都包含什麼app 瀏覽:266
如何判斷網路伺服器正常 瀏覽:652
路由器搭橋遠端伺服器地址是什麼 瀏覽:518
編譯動態庫時會連接依賴庫嗎 瀏覽:710
淘寶手機加密是隨機的嗎 瀏覽:675
解壓包子怎麼裝飾 瀏覽:588
四個數湊24演算法 瀏覽:679