亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python迭代器與生成器作用是什么

發布時間:2020-07-20 11:24:18 來源:億速云 閱讀:514 作者:清晨 欄目:編程語言

這篇文章將為大家詳細講解有關python迭代器與生成器作用是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

python迭代器的用途:用next函數獲取下一個元素,只能向前取值,不會后退。python生成器的用途:動態提供數據,調用return生成一個StopIteration異常,通知next(it)函數不再提供數據。

python迭代器與生成器作用是什么

一、迭代器

什么是迭代器

迭代器是指用iter(可迭代對象)函數返回的對象(實例)

迭代器可以用next(it)函數獲取可迭代對象的數據

迭代器函數:

iter(iterable)從可迭代對象中返回一個迭代器,iterable必須是一個能提供迭代器的可迭代對象

next(iterator)從迭代器iterator中獲取下一條記錄,如果無法獲取下一條記錄,則觸發StopIteration異常

說明:

迭代器是訪問可迭代對象的一種方式

迭代器只能向前取值,不會后退

用iter函數可以返回一個可迭代對象的迭代器

示例:

L = [2,3,4]或者 L = range(2,5)
it = iter(L)#使用iter函數使it綁定一個迭代器對象
next(it)#返回2
next(it)#返回3
next(it)#返回4
next(it)#觸發StopIteration異常

迭代器的用途:

迭代器對象能用next函數獲取下一個元素

示例:

#此示例示意用迭代器來訪問可迭代對象
#用for語句訪問可迭代對象L
L = [2,3,5,7]
for x in L:
print(x)
#用while語句訪問可迭代對象L
it = iter(L)
while True:
try:
x = next(L)
print(x)
except StopIteration:
print('終止迭代,迭代器不能提供任何數據')
break

二、生成器Generator(python2.5之后)

什么是生成器:

生成器是能夠動態提供數據的對象(不是一次性生成從而不占據內存空間),生成器對象也是可迭代對象(實例)

生成器有兩種:

生成器函數

生成器表達式

生成器函數定義:

含有yield語句的函數是生成器函數,此函數被調用時將返回一個生成器對象

yield語句

語法:yield 表達式

說明:yield用于def函數中,目的是將此函數作為生成器函數使用

yield用來生成數據,供迭代器next(it)函數使用

實例:

#此示例示意生成器函數的定義及示意
def myyield():
'''此函數為生成器函數'''
yield 2#生成2
yield 3#生成3
yield 5#生成5
#用for語句訪問myyield函數
for x in myyield():
print(x)
#用迭代器訪問
gen = myyield()
it = iter(gen)
next(it)

生成器函數說明:

(1)生成器函數的調用將返回一個生成器對象,生成器對象是一個可迭代對象

(2)在生成器函數調用return時會生成一個StopIteration異常來通知next(it)函數不再能提供數據

示例:

#寫一個myinteger(n)函數
def myinteger(n):
for x in range(n):
yield x
#for循環訪問生成器
for x in myinteger(int(input('請輸入整數:')))
print(x)
#用迭代器訪問
it = iter(myinteger(10))
while True:
print(next(it))#到10時發生StopIteration錯誤

生成器表達式:

語法:(表達式 for 變量 in 可迭代對象 [if 真值表達式])

作用:用推導式的形式生成一個新的生成器

示例:

gen = (x**2 for x in range(1,4))#并沒有生成數據
#gen = [x**2 for x in range(1,4)]#先在內存中生成數據
it = iter(gen)
next(it)#1
next(it)#4
next(it)#9
next(it)#StopIteration

列表推導式和生成表達式的區別:

生成器是動態生成的,現用現生成,列表表達式是靜態的。

示例:

L = [1,2,3,4]
gen = (x for x in L)#gen綁定生成器
lst = [x for x in L]#lst綁定列表
L[1] = 222#改變原列表的第二個元素
for x in lst:
print(x)#1 2 3 4不變
for x in gen:
print(x)#1 222 3 4 ,第二個數是222

迭代工具函數:

迭代工具函數的作用是生成一個個性化的可迭代對象

函數:

zip( iter1 [,iter2,iter3,…])返回一個zip對象,此對象用于生成一個元組,此元組的個數由最小的可迭代對象決定

enumerate(iterable[,start])生成帶索引的枚舉類型,返回迭代類型為索引-值隊(index,value)對,默認索引從零開始,也可以使用start綁定

示例1:

numbers = [10086,10000,10010,95588]
names = ['中國移動','中國電信','中國聯通']
for x in zip(numbers,names):
print(x)
#生成元組:
#(10086,'中國移動')
#(10000,'中國電信')
#(10010,'中國移動')
#for n,a in zip(numbers,names):
#print(n,a)
#d = dict(zip(names,number))生成字典
#for x in zip(range(10),numbers,names):
# print(x)x為三個對象組成的一個元組

示例2:

#實現機制
def myzip(iter1,iter2):
it1 = iter(iter1)
it2 = iter(iter2)
while True:
x = next(it1)
y = next(it2)
yield (x,y)
for x in myzip(range(100),range(50))
#示例3:
names = list('string')
for x in enumerate(names,start = 100):
print(x)#指定start會使索引從start開始
#(1000,'s') (101,'t')..返回元組的索引-值對,默認索引從0開始
#index = element = x
#print('索引是',index,'對應的元素是',element)

關于python迭代器與生成器作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霸州市| 吉隆县| 新化县| 扶余县| 开封县| 襄垣县| 荔浦县| 绥化市| 双柏县| 曲阳县| 寿宁县| 重庆市| 商南县| 长治县| 台东县| 大宁县| 七台河市| 永登县| 屯留县| 铜陵市| 吉安市| 全南县| 屏南县| 新营市| 廉江市| 庆元县| 玉龙| 西乡县| 沭阳县| 宜兰县| 建宁县| 乌拉特后旗| 炉霍县| 游戏| 孙吴县| 日喀则市| 星子县| 静宁县| 滨州市| 兖州市| 惠来县|