溫馨提示×

溫馨提示×

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

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

python迭代、可迭代、迭代器舉例分析

發布時間:2021-11-25 13:40:01 來源:億速云 閱讀:177 作者:iii 欄目:互聯網科技

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

下面我們通過斐波那契數列類的案例來詳細了解迭代器、生成器。

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


# 創建迭代器
fib = Fib(6)
# 獲取迭代器下一個值
print(next(fib))

# 遍歷迭代器其余的值
for value in fib:
    print(value)
    
print(fib)
ll = (i for i in range(10))
print(ll)

out:
0
1
1
2
3
5
<__main__.Fib object at 0x000001E493DF5700>
<generator object <genexpr> at 0x000001E493936430>

迭代器(iterator)

迭代器指有__iter__方法的函數或類運行或創建實例后生成的命名空間。打印迭代器顯示的就是某某對象在內存某處,迭代器實質是一個內存地址,通過特定的方法訪問該地址可以獲得相應的數據。

緊接著前面的代碼,測試下列代碼。

fib1 = Fib(6)
fib2 = Fib(5)
print(fib1)
print(fib2)

out:
<__main__.Fib object at 0x000001AD3E445700>
<__main__.Fib object at 0x000001AD3E48A4F0>

可以看到fib1和fib2雖然內部代碼相同,但由于它們的參數不同所以它們有不同的命名空間,那么它們就是不同的迭代器。

生成器(generator)

生成器指獲取迭代器內部數據的方法或函數。注意方法和函數本身不是生成器,只有執行后有命名空間且可以返回值的才是生成器。

def even(n):  # 定義一個返回值是偶數的生成器,值范圍在0至n之間
    i = 0
    while i <= n:
        if i % 2 == 0:
            yield i
        i += 1


print('__iter__' in dir(even))
print('__next__' in dir(even))

num = even(5)

print('__iter__' in dir(num))
print('__next__' in dir(num))

out:
False
False
True
True

生成器有2種:

  1. 通過__next__方法return返回值。例子是上面的Fib類。

  2. 通過yield或yield from語句返回值。例子是上面的even函數。有yield或yield from語句的函數在執行后會自動生成__iter__方法和__next__方法。

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

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女