python中Genarator函數(shù)用法分析
本文實例講述了python中Genarator函數(shù)用法。分享給大家供大家參考。具體如下:
Generator函數(shù)的定義與普通函數(shù)的定義沒有什么區(qū)別,只是在函數(shù)體內(nèi)使用yield生成數(shù)據(jù)項即可。Generator函數(shù)可以被for循環(huán)遍歷,而且可以通過next()方法獲得yield生成的數(shù)據(jù)項。
def func(n):
for i in range(n):
yield i
for i in func(3):
print i
r=func(3)
print r.next()
print r.next()
print r.next()
print r.next()
運行結(jié)果如下:
0 1 2 0 1 2 Traceback (most recent call last): File "generator.py", line 10, in <module> print r.next() StopIteration
yield保留字與return 語句的返回值和執(zhí)行原理都不相同。yield生成值并不會中止程序的執(zhí)行,返回值后程序繼續(xù)往后執(zhí)行。return 返回值后,程序?qū)⒅兄箞?zhí)行。
Generator函數(shù)一次只返回一個數(shù)據(jù)項,占用更少的內(nèi)存。每次生成數(shù)據(jù)都要記錄當前的狀態(tài),便于下一次生成數(shù)據(jù)。
當程序需要較高的性能或一次只需要一個值進行處理時,使用generator函數(shù)。當需要獲取一次性一組元素的值時,使用序列。
函數(shù)里只要有了yield,這個函數(shù)就會被編譯成一個generator 函數(shù)。generator函數(shù)object支持python iterator protocol。 每次調(diào)用這個對象的next,generator函數(shù)就執(zhí)行到y(tǒng)ield,獲取到y(tǒng)ield生成的值。如果函數(shù)返回,就拋出一個異常。這里有個概念就是generator 函數(shù)使用yield生成一個值,而不是返回一個值。生成之后函數(shù)還沒結(jié)束,返回了函數(shù)就結(jié)束了。
>>> x = gensquares(5) >>> print x <generator object at 0x00B72D78> >>> print x.next() 0 >>> print x.next() 1 >>> print x.next() 4 >>> print x.next() 9 >>> print x.next() 16 >>> print x.next() Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration >>>
希望本文所述對大家的Python程序設(shè)計有所幫助。
相關(guān)文章
python -m pip install 和 pip in
python -m pip install <package> 使用了 -m 參數(shù)來確保以 Python 模塊的形式運行 pip,適用于確保在不同的環(huán)境中正確使用 pip,這篇文章主要介紹了python -m pip install 和 pip install 的區(qū)別,需要的朋友可以參考下2023-07-07
Windows系統(tǒng)下安裝Python的SSH模塊教程
這篇文章主要介紹了Windows系統(tǒng)下安裝Python的SSH模塊教程,本文涵蓋了pycrypto、ecdsa、paramiko、OpenSSH、SSH等模塊的安裝,需要的朋友可以參考下2015-02-02
解決python3 網(wǎng)絡(luò)請求路徑包含中文的問題
今天小編就為大家分享一篇解決python3 網(wǎng)絡(luò)請求路徑包含中文的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05

