當前位置:首頁 » 編程語言 » pythony

pythony

發布時間: 2022-02-01 15:13:13

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問題

python yield from

defgenerator2():
foriinrange(10):
yieldidefgenerator3():
forjinrange(10,20):
yieldjdefgenerator():
foriingenerator2():
yieldi
forjingenerator3():
yieldj

==

defgenerator():
yieldfromgenerator2()
yieldfromgenerator3()

㈢ 關於python中yield函數

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

㈣ Python yield 語句

我在2x版本下測試下顯式調用throw來拋出GeneratorExit異常是可以被捕獲的

我查了一下文檔,樓主你的理解可能錯了,文檔的意思是說迭代器調用close退出時如果處於暫停狀態就會內部產生一個GeneratorExit異常,這個異常是不能捕獲的,內部會轉換成RuntimeError拋出

正常退出的話則產生StopIteration異常

測試代碼如下

defmy_generator():
try:
yield'dosomething'
exceptValueError:
yield'dealingwiththeexceptions'
exceptGeneratorExit:
yield"Yes,Icanyieldavalue"
finally:
print"Ok,let'sclean"

gen=my_generator()
gen.next()#這行注釋掉後則不會拋出異常
try:
gen.close()
exceptRuntimeError:
print"closeerror"

㈤ 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關鍵字

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

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

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

㈧ python yield列表去重

如果你想對list去重的話,就直接這樣:
a = [5, 5, 2, 1, 9, 1, 5, 10]
a = list(set(a))

㈨ python 中yield後面可不可再執行後面的語句

你好 python 並不會自動緩存數據, 極度懷疑你數據沒插入成功,或者插入操作不在那個2秒SLEEP的時間裡面。

㈩ python的關鍵字yield有什麼作用

yield是python中定義為生成器函數,其本質是封裝了 __iter__和__next__方法 的迭代器;



與return返回的區別:return只能返回一次值,函數就終止了,而yield能多次返回值,每次返回都會將函數暫停,下一次next會從上一次暫停的位置繼續執行;



以下用示例說明:



deftest(a,b):
print("fromtest(),a+b=%d"%(a+b))
return("我是return返回的")

deftest_yield(a,b): #函數體中有yield關鍵字,函數就可以稱為生成器函數
print("fromtest_yield,a+b=%d"%(a+b))
yield("我是第一次碰到yield關鍵字返回的") #程序運行時碰到yield,退出函數體並記錄位置,下次調用跳過之前運行的代碼
print("fromtest_yield,a*2=%d"%(a*2))
yield("我是第二次調用碰到yield關鍵字返回的")

print(test(11,33))
g=test_yield(11,33)
print(next(g)) #通過next()調用生成器函數
print(next(g)) #第二次調用生成器函數


'''
執行結果:

fromtest(),a+b=44
我是return返回的
fromtest_yield,a+b=44
我是第一次碰到yield關鍵字返回的
fromtest_yield,a*2=22
我是第二次調用碰到yield關鍵字返回的

'''
熱點內容
怎麼把蘋果的號轉到安卓手機上 發布:2025-04-05 10:39:05 瀏覽:529
存儲核心架構瓶頸已被攻破 發布:2025-04-05 10:38:27 瀏覽:303
空間新演算法 發布:2025-04-05 10:33:21 瀏覽:704
蜀門和遠征哪個配置低 發布:2025-04-05 10:23:50 瀏覽:284
linux下jdk的安裝 發布:2025-04-05 10:12:20 瀏覽:67
單機江湖腳本 發布:2025-04-05 10:08:32 瀏覽:764
愛奇藝離線緩存怎麼傳藍牙 發布:2025-04-05 10:00:48 瀏覽:140
阿里雲伺服器內存超頻 發布:2025-04-05 10:00:48 瀏覽:575
如何登錄pubg國際服安卓手機 發布:2025-04-05 09:40:07 瀏覽:413
javafor表達式 發布:2025-04-05 09:22:22 瀏覽:869