Pythian學習筆記6:迴圈對象

來源:互聯網
上載者:User

標籤:python   python基礎   python指令碼   迴圈對象   

 以前總想著集中時間來學東西,經過這次國慶假期發現這TM根本就不現實啊,還是每天抽點時間,日積月累這樣比較好。


一、迴圈對象

迴圈對象的並不是隨著Python的誕生就存在的,但它的發展迅速,特別是Python 3x的時代,迴圈對象正在成為迴圈的標準形式。
迴圈對象是這樣一個對象,它包含有一個next()方法(__next__()方法,在python 3x中),
這個方法的目的是進行到下一個結果,而在結束一系列結果之後,舉出StopIteration錯誤。
當一個迴圈結構(比如for)調用迴圈對象時,它就會每次迴圈的時候調用next()方法,直到StopIteration出現,
for迴圈接收到,就知道迴圈已經結束,停止調用next()。

二、類比
假如有一個檔案test.txt,內容如下:
123abcxyz

現在我們來逐條讀取其內容:
f = open("test.txt")print f.next()print f.next()print f.next()# print f.next() #Traceback...in:...StopIteration
在最後一個注釋掉的print f.next()會報錯,提示StopIteration

open()返回的實際上是一個迴圈對象,包含有next()方法。
而該next()方法每次返回的就是新的一行的內容,到達檔案結尾時舉出StopIteration。
這就相當於我們類比了如下迴圈:
for line in open("test.txt"):    print line
or結構自動調用next()方法,將該方法的返回值賦予給line。迴圈知道出現StopIteration的時候結束。

三、產生器
產生器(generator)的主要目的是構成一個使用者自訂的迴圈對象。
產生器的編寫方法和函數定義類似,只是在return的地方改為yield。
產生器中可以有多個yield。當產生器遇到一個yield時,會暫停運行產生器,返回yield後面的值。
當再次調用產生器的時候,會從剛才暫停地方繼續運行,直到下一個yield。
產生器自身又構成一個迴圈器,每次迴圈使用一個yield返回的值。

下面是一個產生器:
def gen():    a = 2    yield a    a = a * 2    yield a    yield 1024
該產生器共有三個yield, 如果用作迴圈器時,會進行三次迴圈。
for i in gen():    print i

看另一個產生器:
def gen():    for i in range(4):        yield i
可以寫成產生器運算式的形式:
G = (x for x in range(4))
產生器運算式是產生器的一種簡便的編寫方式。


四、表推導
表推導(list comprehension)是快速產生表的方法。
例如:
L = []for b in range(10):    L.append(b**2)
以上產生了表L,但實際上有快捷的寫法,也就是表推導的方式:
L = [b**2 for b in range(10)]print(L)
輸出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
又如:
xl = [1,3,5]yl = [9,12,13]L  = [ x**2 for (x,y) in zip(xl,yl) if y > 10]print(L)
輸出:

[9, 25]

Pythian學習筆記6:迴圈對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.