日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python的yield关键字

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

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

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

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

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

看一個例子:

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

?

?

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

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

總結

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

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