亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4306 | 回復(fù): 0
打印 上一主題 下一主題

Python yield 用法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-10-13 10:50 |只看該作者 |倒序瀏覽
yield 用法說明
yield 簡單說來就是一個生成器生成器是這樣一個函數(shù),它記住上一次返回時在函數(shù)體中的位置。對生成器函數(shù)的第二次(或第 n 次)調(diào)用跳轉(zhuǎn)至該函數(shù)中間,而上次調(diào)用的所有局部變量都保持不變

    生成器 是 一個函數(shù)

函數(shù)的所有參數(shù)都會保留

    第二次調(diào)用 此函數(shù) 時

使用的參數(shù)是前一次保留下的.

    生成器還“記住”了它在流控制構(gòu)造

生成器不僅“記住”了它數(shù)據(jù)狀態(tài)。 生成器還“記住”了它在流控制構(gòu)造(在命令式編程中,這種構(gòu)造不只是數(shù)據(jù)值)中的位置。由于連續(xù)性使您在執(zhí)行框架間任意跳轉(zhuǎn),而不總是返回到直接調(diào)用者的上下文(如同生成器那樣),因此它仍是比較一般的。
yield 生成器的運行機制
當(dāng)你問生成器要一個數(shù)時,生成器會執(zhí)行,直至出現(xiàn) yield 語句,生成器把 yield 的參數(shù)給你,之后生成器就不會往下繼續(xù)運行。當(dāng)你問他要下一個數(shù)時,他會從上次的狀態(tài)開始運行,直至出現(xiàn)yield語句,把參數(shù)給你,之后停下。如此反復(fù)直至退出函數(shù)。
例子:Python 排列,組合生成器
#生成全排列
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

#生成組合
def comb(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+1:]
            for c in comb(rest, n-1):
                yield v + c

a = perm('abc')
for b in a:
    print b
    break
print '-'*20
for b in a:
    print b
結(jié)果如下:
102 pvopf006 ~/test> ./generator.py
abc
--------------------
acb
bac
bca
cab
cba
可以看到,在第一個循環(huán)break后,生成器沒有繼續(xù)執(zhí)行,而第二個循環(huán)接著第一個循環(huán)執(zhí)行
個人拙見:只要在子過程內(nèi)執(zhí)行過yield函數(shù)后,程序就會在退出循環(huán)后再次進(jìn)入子過程后會繼續(xù)執(zhí)行yield


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/59571/showart_2069086.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP