導航:首頁 > 編程語言 > pythonyield是什麼意思

pythonyield是什麼意思

發布時間:2022-09-22 13:04:08

python中yield是什麼意思

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

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

② Python初學者,python中return和yield怎麼用的兩個有什麼區別

return:函數在return的地方返回,並跳出,後續代碼均不執行
yield:yield 的作用就是把一個函數變成一個 generator,函數執行到yield 時返回並退出,下次調用時從yield 的下一句代碼執行

③ 如何理解Python關鍵字yield

當函數被調用時,函數體中的代碼是不會運行的,函數僅僅是返回一個生成器對象。這里理解起來可能稍微有點復雜。
函數中的代碼每次會在 for循環中被執行,接下來是最難的一部分:
for第一次調用生成器對象時,代碼將會從函數的開始處運行直到遇到 yield為止,然後返回此次循環的第一個值,接著循環地執行函數體,返回下一個值,直到沒有值返回為止。

④ python中print,return和yield的區別

def func1(): for i in range(1, 5): print idef func2(): for i in range(1, 5): return idef func3(): for i in range(1, 5): yield i

func1()
print func2()print func3()
1.print並不會阻斷程序的執行,就不用多說了。
2.func2()方法中的循環執行第一次就被return結束掉了。(後面的2、3、4就不會有返回的機會了)
3.yield你可以通俗的叫它"輪轉容器",可用現實的一種實物來理解:水車,先yield來裝入數據、產出generator object、使用next()來釋放;好比水車轉動後,車輪上的水槽裝入水,隨著輪子轉動,被轉到下面的水槽就能將水送入水道中流入田裡。
def func3(): for i in range(1,5): yield i#裝入 gob = func3()#generator 類型print next(gob)#1 釋放的第一個裝入的數據,(先入先出)print next(gob)#2print next(gob)#3print next(gob)#4
print next(gob)#報錯
個人理解,yield在python內部是當作list處理的:
def func3(): for i in range(1,5): yield i

yi = []
yi = func3()for y in yi: print y
1
2
3
4

⑤ 如何理解Python關鍵字yield

理解迭代的內部機制

迭代是操作可迭代對象(實現了 __iter__()
方法)和迭代器(實現了 __next__()
方法)的過程。可迭代對象是任何你可以從其得到一個迭代器對象的任意對象(譯註:調用內建函數iter()),迭代器是能讓你在可迭代對象上進行迭代的對象(譯註:這里好繞,迭代器實現了 __iter__()
方法,因此它也是一個可迭代對象)。

⑥ 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的能力還可以用在其它方面,發現拍案的在貼咯。

⑦ 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關鍵字yield

理解迭代的內部機制

迭代是操作可迭代對象(實現了 __iter__()
方法)和迭代器(實現了 __next__()
方法)的過程。可迭代對象是任何你可以從其得到一個迭代器對象的任意對象(譯註:調用內建函數iter()),迭代器是能讓你在可迭代對象上進行迭代的對象(譯註:這里好繞,迭代器實現了 __iter__()
方法,因此它也是一個可迭代對象)。

⑨ yield 是什麼 python

單看這一句,意思是在說:如果traindata==True,函數就返回(ID,x,y),否則返回(ID,x)。

閱讀全文

與pythonyield是什麼意思相關的資料

熱點內容
androidlinuxadt 瀏覽:498
廣聯達軟體加密鎖原裝晶元 瀏覽:338
如何打開資料庫伺服器 瀏覽:310
kppm是什麼app 瀏覽:538
python多個數組命名 瀏覽:191
a演算法csdn 瀏覽:23
r720伺服器什麼年代 瀏覽:975
本地電腦怎麼設置傳奇伺服器 瀏覽:1002
安卓10框架怎麼製作 瀏覽:959
程序員退休工資待遇 瀏覽:609
湛江中文編程數控系統代理 瀏覽:419
openglandroid書 瀏覽:170
奇妙組件安卓版叫什麼 瀏覽:729
微信授權什麼app權重最高 瀏覽:11
php循環數組foreach 瀏覽:78
zip和app有什麼區別 瀏覽:633
乖法快速演算法 瀏覽:872
日本程序員一年工資 瀏覽:199
出國做程序員怎麼樣 瀏覽:736
rar鎖定壓縮文件 瀏覽:873