迭代和生成器

2022-07-08 23:42:11 字數 1607 閱讀 8313

'''列表迭代的本質:__iter()__函式返回乙個迭代器,然後可以呼叫迭代器上的next方法'''

arr = [1,2,3,4,5]

arr_iterator = arr.__iter__()

print(arr_iterator.__next__())

print(next(arr_iterator))

'''乙個典型的迭代器實現。例子來自《流暢的python》.'''

import re

import reprlib

re_word = re.compile('\w+')

class sentence:

def __init__(self,text):

self.text = text

self.words = re_word.findall(text)

def __repr__(self):

return 'sentence(%s)' %reprlib.repr(self.text)

def __iter__(self):

return sentenceiterator(self.words)

class sentenceiterator:

def __init__(self,words):

self.words = words

self.index = 0

def __next__(self):

try:

word = self.words[self.index]

except indexerror:

raise stopiteration()

self.index += 1

return word

def __iter__(self):

return self

s = sentence('abddd a dd dw')

for i in s:

print(i)

'''用生成器建立的迭代物件。'''

def frange(start, stop, increment):

x = start

while x < stop:

yield x

x += increment

for i in frange(0,5,0.5):

print(i)

'''用生成器實現費波切納演算法'''

import sys

def fibonacci(n): # 生成器函式 - 斐波那契

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 是乙個迭代器,由生成器返回生成

while true:

try:

print(next(f), end=" ")

except stopiteration:

sys.exit()

生成器和迭代器

可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...

迭代器和生成器

1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...

生成器和迭代器

1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...