中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

python迭代、可迭代、迭代器的區別是什么

發布時間:2021-11-25 11:58:56 來源:億速云 閱讀:119 作者:iii 欄目:互聯網科技

這篇文章主要講解了“python迭代、可迭代、迭代器的區別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python迭代、可迭代、迭代器的區別是什么”吧!

生成器的種類

__next__方法

class Fib(object):
    # count表示生成斐波那契數列的個數
    def __init__(self, count):
        self.count = count
        # 保存前兩個值
        self.x = 0
        self.y = 1
        # 記錄生成數列的下標
        self.index = 0

    # 聲明Fib類是可迭代的
    def __iter__(self):
        return self

    # 生成下一個數
    def __next__(self):
        if self.index < self.count:
            result = self.x
            self.x, self.y = self.y, self.x + self.y
            self.index += 1
            return result
        else:
            raise StopIteration


fib1 = Fib(5)
fib1 = Fib(5)
print(next(fib1))
print(next(fib1))
print(next(fib1))
print(next(fib1))
print(next(fib1))
# print(fib1.__next__())  # 功能和next()一致
# print(fib1.__next__())
# print(fib1.__next__())
# print(fib1.__next__())
# print(fib1.__next__())

out:
0
1
1
2
3

以上是斐波那契數列類的實現方法,生成器就是它的__next__方法。

yield語句

def febonacci(n):
    x, y, count = 0, 1, 0
    while n > count:
        yield x
        x, y = y, x + y
        count += 1

feb5=febonacci(5)
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print('__iter__' in dir(febonacci))
print('__next__' in dir(febonacci))
print('__iter__' in dir(feb5))
print('__next__' in dir(feb5))

out:
0
1
1
2
3
False
False
True
True

以上是斐波那契數列函數的yield實現方法,生成器就是python根據yield語句自動生成的__next__方法。

上一次說過的一個點再強調一次:方法和函數本身不是生成器,只有執行后有命名空間且可以返回值的才是生成器。

yield from語句

def febonacci(n):
    x, y, count = 0, 1, 0
    result = []
    while n > count:
        result.append(x)
        x, y = y, x + y
        count += 1
    count = 0
    result_copy=result.copy()
    while n > count:
        yield from result
        count += 1
        yield from result_copy


feb5 = febonacci(5)
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))
print(next(feb5))

out:
0
1
1
2
3
0
1
1
2
3

以上是斐波那契數列函數的yield from實現方法,yield from是指從容器中取值返回。請認真看代碼,重點注意2條yield語句執行結果。

不同生成器的區別

  1. next方法在面向對象編程時是最適合。注意next方法中if判斷邊界和raise StopIteration語句結束取值的結構。

  2. yield語句在函數式編程最適合。再次強調函數本身不是生成器,只有執行后有命名空間且可以返回值的才是生成器。另外,yield通常是放在循環體內使用,執行到yield語句時會返回值,此時函數體內會生成一個斷點,再次執行函數時從斷點下一條語句繼續執行。

  3. yield from語句與yield的區別是取值方式不同,yield from取值是從容器中取,而yield取值是實時生成的。另外,在使用多條yield from語句時一定要謹記,返回值是一個容器取完再取另外一個容器,而不是輪流取。注意看上面的案例。

感謝各位的閱讀,以上就是“python迭代、可迭代、迭代器的區別是什么”的內容了,經過本文的學習后,相信大家對python迭代、可迭代、迭代器的區別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

庆云县| 岱山县| 古交市| 临沂市| 武隆县| 梁平县| 信宜市| 汝城县| 湖北省| 涞水县| 保亭| 小金县| 崇明县| 阜新| 新乡市| 乌拉特中旗| 尚义县| 阜阳市| 佛坪县| 霍林郭勒市| 遂溪县| 堆龙德庆县| 阿拉善盟| 商城县| 龙里县| 新平| 平陆县| 芜湖县| 诏安县| 穆棱市| 滨海县| 苍南县| 永修县| 深州市| 且末县| 定西市| 怀集县| 罗源县| 阳泉市| 双峰县| 白银市|