日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python的yield关键字

發(fā)布時間:2025/3/21 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的yield关键字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx

忽然得知Python有個叫yield的關鍵字,好奇之下去查了查,花了點時間基本弄明白了,故寫在此備忘,順便充充字數(shù)。

yield關鍵字用來定義生成器(Generator),其具體功能是可以當return使用,從函數(shù)里返回一個值,不同之處是用yield返回之后,可以讓函數(shù)從上回yield返回的地點繼續(xù)執(zhí)行。也就是說,yield返回函數(shù),交給調用者一個返回值,然后再“瞬移”回去,讓函數(shù)繼續(xù)運行, 直到嚇一跳yield語句再返回一個新的值。

使用yield返回后,調用者實際得到的是一個迭代器對象,迭代器的值就是返回值,而調用該迭代器的next()方法會導致該函數(shù)恢復yield語句的執(zhí)行環(huán)境繼續(xù)往下跑,直到遇到下一個yield為止,如果遇不到y(tǒng)ield,就會拋出異常表示迭代結束。

看一個例子:

>>> def test_yield():
...???? yield 1
...???? yield 2
...???? yield (1,2)
...
>>> a = test_yield()
>>> a.next()
1
>>> a.next()
2
>>> a.next()
(1, 2)
>>> a.next()
Traceback (most recent call last):
? File "<stdin>", line 1, in ?
StopIteration

每次調用a.next(),都會得到下一個yield返回的值,最后一次調用會拋出StopIteration結束異常。

暫時沒想到這個東西有什么用,也許就是可以省一些代碼。

一個有趣的例子,用來生成一個序列的全排列:

def

?perm(

items, n=None

)

:

??? if

?n is

?None

:

??????? n = len

(

items)

?

??? for

?i in

?range

(

len

(

items)

)

:

??????? v = items[

i:i+1]

?

??????? if

?n == 1:

??????????? yield

?v

??????? else

:

??????????? rest = items[

:i]

?+ items[

i+1:]

?

??????????? for

?p in

?perm(

rest, n-1)

:

??????????????? yield

?v + p

?

?

的確是方便一些,不過我還是覺得都放到一個數(shù)組里更直觀...

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tossgoer/archive/2010/08/18/5822303.aspx

總結

以上是生活随笔為你收集整理的Python的yield关键字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。