日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python3迭代器與生成器

Python3 迭代器與生成器


迭代器

迭代是 Python 最強(qiáng)大的功能之一,是訪問集合元素的一種方式。

創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、安平網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為安平等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

迭代器是一個(gè)可以記住遍歷的位置的對象。

迭代器對象從集合的第一個(gè)元素開始訪問,直到所有的元素被訪問完結(jié)束。迭代器只能往前不會后退。

迭代器有兩個(gè)基本的方法:iter()next()。

字符串,列表或元組對象都可用于創(chuàng)建迭代器:

實(shí)例(Python 3.0+)

>>>
list
=
[
1
,
2
,
3
,
4
]


>>> it
=
iter
(
list
)    
# 創(chuàng)建迭代器對象


>>>
print
(next
(it
)
)  
# 輸出迭代器的下一個(gè)元素


1


>>>
print
(next
(it
)
)


2


>>>

迭代器對象可以使用常規(guī)for語句進(jìn)行遍歷:

實(shí)例(Python 3.0+)

#!/usr/bin/python3

list
=
[
1
,
2
,
3
,
4
]

it
=
iter
(
list
)

# 創(chuàng)建迭代器對象

for

x

in

it
:
print

(
x
,
end
=
"

"
)

執(zhí)行以上程序,輸出結(jié)果如下:

1 2 3 4

也可以使用 next() 函數(shù):

實(shí)例(Python 3.0+)

#!/usr/bin/python3

import

sys

# 引入 sys 模塊

list
=
[
1
,
2
,
3
,
4
]

it
=
iter
(
list
)

# 創(chuàng)建迭代器對象

while

True
:
try
:
print

(
next
(
it
)
)

except

StopIteration
:
sys
.
exit
(
)

執(zhí)行以上程序,輸出結(jié)果如下:

1
2
3
4

創(chuàng)建一個(gè)迭代器

把一個(gè)類作為一個(gè)迭代器使用需要在類中實(shí)現(xiàn)兩個(gè)方法 __iter__() 與 __next__() 。

如果你已經(jīng)了解的面向?qū)ο缶幊?,就知道類都有一個(gè)構(gòu)造函數(shù),Python 的構(gòu)造函數(shù)為 __init__(), 它會在對象初始化的時(shí)候執(zhí)行。

更多內(nèi)容查閱:

__iter__() 方法返回一個(gè)特殊的迭代器對象, 這個(gè)迭代器對象實(shí)現(xiàn)了 __next__() 方法并通過 StopIteration 異常標(biāo)識迭代的完成。

__next__() 方法(Python 2 里是 next())會返回下一個(gè)迭代器對象。

創(chuàng)建一個(gè)返回?cái)?shù)字的迭代器,初始值為 1,逐步遞增 1:

實(shí)例(Python 3.0+)

class

MyNumbers
:
def

__iter__
(
self
)
:
self
.
a
=
1

return

self

def

__next__
(
self
)
:
x
=
self
.
a

self
.
a
+=
1

return

x

myclass
=
MyNumbers
(
)

myiter
=
iter
(
myclass
)

print
(
next
(
myiter
)
)

print
(
next
(
myiter
)
)

print
(
next
(
myiter
)
)

print
(
next
(
myiter
)
)

print
(
next
(
myiter
)
)

執(zhí)行輸出結(jié)果為:

1
2
3
4
5

StopIteration

StopIteration 異常用于標(biāo)識迭代的完成,防止出現(xiàn)無限循環(huán)的情況,在 __next__() 方法中我們可以設(shè)置在完成指定循環(huán)次數(shù)后觸發(fā) StopIteration 異常來結(jié)束迭代。

在 20 次迭代后停止執(zhí)行:

實(shí)例(Python 3.0+)

class

MyNumbers
:
def

__iter__
(
self
)
:
self
.
a
=
1

return

self

def

__next__
(
self
)
:
if

self
.
a
<=
20
:
x
=
self
.
a

self
.
a
+=
1

return

x

else
:
raise

StopIteration

myclass
=
MyNumbers
(
)

myiter
=
iter
(
myclass
)

for

x

in

myiter
:
print
(
x
)

執(zhí)行輸出結(jié)果為:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

生成器

在 Python 中,使用了 yield 的函數(shù)被稱為生成器(generator)。

yield 是一個(gè)關(guān)鍵字,用于定義生成器函數(shù),生成器函數(shù)是一種特殊的函數(shù),可以在迭代過程中逐步產(chǎn)生值,而不是一次性返回所有結(jié)果。

跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡單點(diǎn)理解生成器就是一個(gè)迭代器。

當(dāng)在生成器函數(shù)中使用 yield 語句時(shí),函數(shù)的執(zhí)行將會暫停,并將 yield 后面的表達(dá)式作為當(dāng)前迭代的值返回。

然后,每次調(diào)用生成器的 next() 方法或使用 for 循環(huán)進(jìn)行迭代時(shí),函數(shù)會從上次暫停的地方繼續(xù)執(zhí)行,直到再次遇到 yield 語句。這樣,生成器函數(shù)可以逐步產(chǎn)生值,而不需要一次性計(jì)算并返回所有結(jié)果。

調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對象。

下面是一個(gè)簡單的示例,展示了生成器函數(shù)的使用:

實(shí)例

def

countdown
(
n
)
:
while

n
>
0
:
yield

n

n
-=
1

# 創(chuàng)建生成器對象

generator
=
countdown
(
5
)

# 通過迭代生成器獲取值

print
(
next
(
generator
)
)

# 輸出: 5

print
(
next
(
generator
)
)

# 輸出: 4

print
(
next
(
generator
)
)

# 輸出: 3

# 使用 for 循環(huán)迭代生成器

for

value

in

generator
:
print
(
value
)

# 輸出: 2 1

以上實(shí)例中,countdown 函數(shù)是一個(gè)生成器函數(shù)。它使用 yield 語句逐步產(chǎn)生從 n 到 1 的倒數(shù)數(shù)字。在每次調(diào)用 yield 語句時(shí),函數(shù)會返回當(dāng)前的倒數(shù)值,并在下一次調(diào)用時(shí)從上次暫停的地方繼續(xù)執(zhí)行。

通過創(chuàng)建生成器對象并使用 next() 函數(shù)或 for 循環(huán)迭代生成器,我們可以逐步獲取生成器函數(shù)產(chǎn)生的值。在這個(gè)例子中,我們首先使用 next() 函數(shù)獲取前三個(gè)倒數(shù)值,然后通過 for 循環(huán)獲取剩下的兩個(gè)倒數(shù)值。

生成器函數(shù)的優(yōu)勢是它們可以按需生成值,避免一次性生成大量數(shù)據(jù)并占用大量內(nèi)存。此外,生成器還可以與其他迭代工具(如for循環(huán))無縫配合使用,提供簡潔和高效的迭代方式。

執(zhí)行以上程序,輸出結(jié)果如下:

5
4
3
2
1

以下實(shí)例使用 yield 實(shí)現(xiàn)斐波那契數(shù)列:

實(shí)例(Python 3.0+)

#!/usr/bin/python3

import

sys

def

fibonacci
(
n
)
:
# 生成器函數(shù) - 斐波那契

a
,
b
,
counter
=
0
,
1
,
0

while

True
:
if

(
counter
>
n
)
:
return

yield

a

a
,
b
=
b
,
a
+
b

counter
+=
1

f
=
fibonacci
(
10
)

# f 是一個(gè)迭代器,由生成器返回生成

while

True
:
try
:
print

(
next
(
f
)
,
end
=
"

"
)

except

StopIteration
:
sys
.
exit
(
)

執(zhí)行以上程序,輸出結(jié)果如下:

0 1 1 2 3 5 8 13 21 34 55

當(dāng)前標(biāo)題:Python3迭代器與生成器
網(wǎng)址分享:http://www.dlmjj.cn/article/dhsiigg.html