Python 學習筆記十五 迴圈物件

2022-01-30 17:21:33 字數 1791 閱讀 8214

所謂的迴圈物件,包含有乙個next()方法(python3中為

__next__()

),這個方法的目的就是進行到下乙個結果,而在結束一系列結果之後,舉出stopiteration錯誤

當乙個迴圈結構(例如for)呼叫迴圈物件時,它就會每次迴圈的時候呼叫next()方法,直到stopiteration出現為止,for迴圈接收到,就知道迴圈已經結束,停止呼叫next()

假設我們有乙個檔案data.txt

my english is not good.

my english isn't very well.

i can speak a little english.

執行python命令列

>>>f = open('data.txt')

>>>f.__next__()

'my english is not good.\n'

>>>f.__next__()

"my english isn't very well.\n"

>>>f.__next__()

'i can speak a little english.'

>>>f.__next__()

traceback (most recent call last):

file "", line 1, in

stopiteration

open()返回的實際上是乙個迴圈物件,包含__next__()方法,而該next()方法每次返回的就是新的一行的內容,到達檔案結尾時舉出stopiteration。這樣,我們相當於手工進行了迴圈。

自動迴圈如下:

for data in open("data.txt"):

print(data)

在這裡,for結構自動呼叫next()方法,將該方法的返回值賦予給line。迴圈知道出現stopiteration的時候結束生成器(generator)的主要目的是構成乙個使用者自定義的迴圈物件.

生成器的編寫方法和函式定義類似,只是在return的地方改為yield。生成器中可以有多個yield。當生成器遇到乙個yield時,會暫停執行生成器,返回yield後面的值。當再次呼叫生成器的時候,會從剛才暫停的地方繼續執行,直到下乙個yield。生成器自身又構成乙個迴圈器,每次迴圈使用乙個yield返回的值。

下面是乙個生成器例子:

def generator():

a = 100

yield a

a = a*10

yield a

yield 10000

該生成器共有三個yield, 如果用作迴圈器時,會進行三次迴圈。

for i in generator():

print(i)

列印結果:

1001000

10000

第二個生成器例子:

def gen():

for i in range(6):

yield i

呼叫生成器

for j in gen():

print(j)

列印結果01

2345

表推導(list comprehension)是快速生成表的方法。它的語法簡單,很有實用價值。

表推導案例:

l = [x**2 for x in range(4)]

列印

for i in l:

print(i)

列印結果01

49

Python學習筆記(十五)python檔案操作

f1 open r e python data data1.txt 讀取data1.txt檔案,使用系統預設緩衝區大小,為了讀取快點,使用快取吧!p1 f.read 5 先讀5個位元組 p2 f.read 餘下的都讀出來 f.close f open r e python data data3.tx...

python學習筆記(迴圈)

python中沒有沒有do while迴圈。迴圈體如果有多條語句,那麼靠縮進來表示乙個塊。1.while迴圈 1 一般形式 while condition operation 2 和else連用 當while迴圈條件不符合的時候跳出迴圈的時候如果想在跳出的時候執行某個句子,可以和else連用,這個方...

Python學習筆記 迴圈

使用這種方式迴圈輸出列表中的內容,這裡是tuple元組的例子 names michael bob tracy for name in names print name range 函式,可以生成乙個整數序列,再通過list 函式可以轉換為list。以此來獲得序列list list range 5 如...