91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

python迭代器和生成器有什么區別

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

小編給大家分享一下python迭代器和生成器有什么區別,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

迭代

1. 什么是迭代?

使用for循環遍歷取值的過程叫做迭代,比如:使用for循環遍歷列表獲取值的過程

python迭代器和生成器有什么區別

2. 可迭代對象

使用for循環遍歷取值的對象叫做可迭代對象, 比如:列表、元組、字典、集合、range、字符串

3.如何判斷一個對象是否可以迭代

可以使用isinstance()判斷一個對象是否是可迭代對象

python迭代器和生成器有什么區別

Python 迭代器

上面簡單的介紹了一下迭代,迭代是 Python 最強大的功能之一,是訪問集合元素的一種方式。現在正式進入主題:迭代器,迭代器是一個可以記住遍歷的位置的對象。

迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。

迭代器只能往前不會后退。

迭代器有兩個基本的方法:iter() 和 next(),且字符串,列表或元組對象都可用于創建迭代器,迭代器對象可以使用常規 for 語句進行遍歷,也可以使用 next() 函數來遍歷。

具體的實例:

python迭代器和生成器有什么區別

iter()函數與next()函數

list、tuple等都是可迭代對象,我們可以通過iter()函數獲取這些可迭代對象的迭代器。然后我們可以對獲取到的迭代器不斷使用next()函數來獲取下一條數據。iter()函數實際上就是調用了可迭代對象的 __iter__ 方法。

python迭代器和生成器有什么區別

注意,當我們已經迭代完最后一個數據之后,再次調用next()函數會拋出StopIteration的異常,來告訴我們所有數據都已迭代完成,不能再執行next()函數了。

lsit 生成式(列表生成式)

1、創建 list 的方式

之前經過我們的學習,都知道如何創建一個 list ,可是有些情況,用賦值的形式創建一個 list 太麻煩了,特別是有規律的 list ,一個一個的寫,一個一個賦值,太麻煩了。比如要生成一個有 30 個元素的 list ,里面的元素為 1 - 30 。我們可以這樣寫:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

這個其實在之前也有提到過:比如有個例子,打印九九乘法表,用這個方法其實就幾句代碼就可以了,可以參考之前文章:循環語句的運用

但是,如果用到 list 生成式,可以一句代碼就生成九九乘法表了。具體看代碼:

python迭代器和生成器有什么區別

最后輸出的結果:

python迭代器和生成器有什么區別

不過,這里我們先要了解如何創建 list 生成式

2、list 生成式的創建

首先,lsit 生成式的語法為:

python迭代器和生成器有什么區別

第一種語法:首先迭代 iterable 里所有內容,每一次迭代,都把 iterable 里相應內容放到iter_var 中,再在表達式中應用該 iter_var 的內容,最后用表達式的計算值生成一個列表。

第二種語法:加入了判斷語句,只有滿足條件的內容才把 iterable 里相應內容放到 iter_var 中,再在表達式中應用該 iter_var 的內容,最后用表達式的計算值生成一個列表。

其實不難理解的,因為是 list 生成式,因此肯定是用 [] 括起來的,然后里面的語句是把要生成的元素放在前面,后面加 for 循環語句或者 for 循環語句和判斷語句。

例子:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

可以看到,就是把要生成的元素 x * x 放到前面,后面跟 for 循環,就可以把 list 創建出來。那么 for 循環后面有 if 的形式呢?又該如何理解:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

這個例子是為了求 1 到 10 中偶數的平方根,上面也說到, x * x 是要生成的元素,后面那部分其實就是在 for 循環中嵌套了一個 if 判斷語句。

那么有了這個知識點,我們也可以猜想出,for 循環里面也嵌套 for 循環。具體示例:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

其實知道了 list 生成式是怎樣組合的,就不難理解這個東西了。因為 list 生成式只是把之前學習的知識點進行了組合,換成了一種更簡潔的寫法而已。

生成器

利用迭代器,我們可以在每次迭代獲取數據(通過next()方法)時按照特定的規律進行生成。但是我們在實現一個迭代器時,關于當前迭代到的狀態需要我們自己記錄,進而才能根據當前狀態生成下一個數據。為了達到記錄當前狀態,并配合next()函數進行迭代使用,我們可以采用更簡便的語法,即生成器(generator)。生成器是一類特殊的迭代器。

創建生成器的方法1

要創建一個生成器,有很多種方法。第一種?法很簡單,只要把一個列表生成式的 [ ] 改成 ( )

python迭代器和生成器有什么區別

創建 L 和 G 的區別僅在于最外層的 [ ] 和 ( ) , L 是一個列表,而 G 是一個生成器。我們可以直接打印出列表L的每一個元素,而對于生成器G,我們可以按照迭代器的使用方法來使用,即可以通過next()函數、for循環、list()等方法使用。

python迭代器和生成器有什么區別

創建生成器的方法2

generator?常強大。如果推算的算法比較復雜,用類似列表生成式的 for 循環無法實現的時候,還可以用函數來實現。 我們用著名的斐波那契數列來舉例,回想我們在上一次?迭代器的實現方式:

python迭代器和生成器有什么區別

注意,在用迭代器實現的方式中,我們要借助幾個變量(n、current、num1、num2)來保存迭代的狀態。現在我們用生成器來實現一下。

python迭代器和生成器有什么區別

迭代器和生成器綜合例子

因為迭代器和生成器基本是互通的,因此有些知識點需要綜合在一起

1、反向迭代

反向迭代,也是常有的需求了,比如從一開始迭代的例子里,有個輸出 list 的元素,從 1 到 5 的

python迭代器和生成器有什么區別

那么我們從 5 到 1 呢?這也很簡單, Python 中有內置的函數 reversed()

python迭代器和生成器有什么區別

方向迭代很簡單,可是要注意一點就是:反向迭代僅僅當對象的大小可預先確定或者對象實現了 __reversed__() 的特殊方法時才能生效。 如果兩者都不符合,那你必須先將對象轉換為一個列表才行

其實很多時候我們可以通過在自定義類上實現 __reversed__() 方法來實現反向迭代。不過有些知識點在之前的篇節中還沒有提到,不過可以相應的看下,有編程基礎的,學完上面的知識點應該也能理解的。

python迭代器和生成器有什么區別

輸出的結果是 1 到 30 然后 30 到 1 ,分別是順序打印和倒序打印

2、同時迭代多個序列

你想同時迭代多個序列,每次分別從一個序列中取一個元素。你遇到過這樣的需求嗎?

為了同時迭代多個序列,使用 zip() 函數,具體示例:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

其實 zip(a, b) 會生成一個可返回元組 (x, y) 的迭代器,其中 x 來自 a,y 來自 b。 一旦其中某個序列到底結尾,迭代宣告結束。 因此迭代長度跟參數中最短序列長度一致。注意理解這句話喔,也就是說如果 a , b 的長度不一致的話,以最短的為標準,遍歷完后就結束。

利用 zip() 函數,我們還可把一個 key 列表和一個 value 列表生成一個 dict (字典),如下:

python迭代器和生成器有什么區別

輸出的結果:

python迭代器和生成器有什么區別

這里提一下, zip() 是可以接受多于兩個的序列的參數,不僅僅是兩個。

看完了這篇文章,相信你對python迭代器和生成器有什么區別有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

贡觉县| 浦县| 黑龙江省| 长阳| 博客| 竹北市| 留坝县| 龙州县| 廉江市| 东安县| 安乡县| 讷河市| 阜康市| 丰城市| 阿图什市| 甘泉县| 临沂市| 集安市| 海口市| 东台市| 札达县| 屯留县| 梧州市| 从江县| 浦东新区| 湘阴县| 江北区| 芜湖市| 铜山县| 景德镇市| 临朐县| 桂阳县| 涟源市| 溆浦县| 隆回县| 龙口市| 陈巴尔虎旗| 海原县| 定陶县| 繁昌县| 兴义市|