網(wǎng)站布局結構如何引流客源最快的方法
一、迭代器
支持迭代的容器,如列表(list)、元組(tuple)、字典(dict)、集合(set)這些序列式容器。
自定義迭代器的類中必須實現(xiàn)以下2個方法:
__next__(self):返回容器的下一個元素。
__iter__(self):該方法返回一個迭代器(iterator)。
除此之外,Python 內(nèi)置的 iter() 函數(shù)也會返回一個迭代器,該函數(shù)的語法格式如下:
iter(obj[, sentinel])
其中,obj 必須是一個可迭代的容器對象,而 sentinel 作為可選參數(shù),如果使用此參數(shù),要求 obj 必須是一個可調用對象(__call__)。
二、生成器
特殊的迭代器,與迭代器不同的是,它可以實現(xiàn)在迭代的同時生成元素,而迭代器必須先將所有數(shù)據(jù)存儲到容器中,才能開始迭代。
生成器創(chuàng)建方式也比迭代器簡單很多:
定義一個以 yield 關鍵字標識返回值的函數(shù);
調用剛剛創(chuàng)建的函數(shù),即可創(chuàng)建一個生成器。
def intNum():print('開始執(zhí)行')for i in range(5):yield iprint('繼續(xù)執(zhí)行')
num = intNum() # 成功過創(chuàng)建了一個num生成器對象
和 return 相比,yield 除了可以返回相應的值,還有一個更重要的功能,即每當程序執(zhí)行完該語句時,程序就會暫停執(zhí)行。
print(intNum()) 即便調用生成器函數(shù),Python 解釋器也不會執(zhí)行函數(shù)中的代碼,它只會返回一個生成器(對象)。
要想使生成器函數(shù)得以執(zhí)行,或者想使執(zhí)行完 yield 語句立即暫停的程序得以繼續(xù)執(zhí)行,有以下 2 種方式:
通過生成器(上面程序中的 num)調用 next() 內(nèi)置函數(shù)或者 __next__() 方法;
通過 for 循環(huán)遍歷生成器。
# 調用next()內(nèi)置函數(shù)
print(next(num))# 調用__next()__方法
print(num.__next__())# 通過for循環(huán)遍歷生成器
for i in num:print(i)
?
?除此之外,還可以使用 list() 函數(shù)和 tuple() 函數(shù),直接將生成器能生成的所有值存儲成列表或者元組的形式。例如:
num = intNum()
print(list(num))num = intNum()
print(tuple(num))