1. 程式人生 > >Python 中 生成器、迭代器、可迭代物件 的概念

Python 中 生成器、迭代器、可迭代物件 的概念

生成器

在 Python 中,一邊迴圈一邊計算的機制,稱為 生成器(generator)

可以通過 next() 函式獲得 generator 的下一個返回值

生成器 的兩種表示方法:

1、將列表生成式的 [ ] 改為 ( )

[2*x for x in range(10)] => (2*x for x in range(10))

2、使用 yield 關鍵字

以裴波拉切數列為例


In [1]: def fib(max):    # fib 是生成器函式
   ...:     n, a, b = 0, 0, 1
   ...:     while n < max:
   ...
: yield b ...: a, b = b, a + b ...: n = n + 1 ...: return 'done' ...: In [2]: fib(5) # 具體的 fib(5) 才是生成器 Out[2]: <generator object fib at 0x05098CF0> In [3]: g = fib(5) In [4]: next(g) Out[4]: 1 ​ In [5]: next(g) Out[5]: 1 ​ In [6]: next(g) Out[6]: 2
​ In [7]: next(g) Out[7]: 3 In [8]: next(g) Out[8]: 5 ​ In [9]: from inspect import isgeneratorfunction ​ In [10]: isgeneratorfunction(fib) # 判斷是否是 generator function Out[10]: True In [11]: import types ​ In [12]: isinstance(fib(5), types.GeneratorType) # 判斷是否是 generator Out[12
]: True

迭代器,可迭代物件

能作用於 for 迴圈的都是 可迭代物件(Iterable),包括內建的 集合資料型別生成器

可以被 next() 函式呼叫並不斷返回下一個值的物件稱為 迭代器(Iterator)

生成器都是 Iterator物件,但 list、dict、str 雖然是 Iterable,卻不是 Iterator
可以使用 iter() 將 Iterable 轉換為 Iterator

In [13]: import collections

In [14]: isinstance('abc', collections.Iterable)       # 判斷是否是 Iterable
Out[14]: TrueIn [15]: isinstance('abc', collections.Iterator)       # 判斷是否是 Iterator
Out[15]: False

In [16]: isinstance(iter('abc'), collections.Iterator) 
Out[16]: True

相關推薦

python生成器物件

最近學習了python中的生成器、迭代器、可迭代物件的知識,現在回顧一下,鞏固理解 先說一下列表生成式: 執行結果如下: 通過方括號加入裡面的表示式,從而生成一個列表,在這裡注意一下,列表生成時也可以加入函式: 結果如下:   計算了X的三次方

列表解析式生成器物件的區別和應用

導文 語法糖(Syntactic sugar) 列表生成式(list comprehension) 生成器(generator) 迭代器(iterator) 可迭代物件(iterable) Iterable、Iterator與Generator之間的關係

python物件生成器理解

上篇文章, python itertools 裡面實現的groupby方法。裡面用到了object, id, iter等很基礎的方法, 看的有點暈。這裡重新整理一下迭代器,可迭代物件, 生成器。複習一下,加深印象。 python語言很容易上手。比如for迴圈。 a = [1, 2,

Python物件生成器

1. 迭代器 迭代器是訪問集合元素的一種方式。迭代器物件從集合的第一個元素開始訪問,知道所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。 1.1 使用迭代器的優點 對於原生支援隨機訪問的資料結構(

python生成器與叠對象

但是 class 進行 避免異常 示例代碼 iterable 打印 iterator 同時 來簡單的說下python中的生成器和可叠代對象以及叠代器的問題。只是簡單地記錄一下並不涉及太深入的內容。 首先來說一下什麽是生成器,先看下面的代碼: 1 #_*_ coding:u

物件生成器區別

迭代物件 :實現__iter__方法,返回迭代器。不需要顯示繼承Iterable, 迭代器: 實現_iter__方法,__next__方法,不需要顯示繼承Iterator from collections import Iterable,Iterator def generator():

python物件

迭代器 定義:能夠使用for-in進行遍歷,並且能夠使用next依次獲取其中一個元素。 說明: 生成器就是一種特殊的迭代器 判斷一個物件是不是迭代器 from collections import Iterator # lt

Pythoh 物件,容器,生成器

容器一般都是可迭代物件,是一種資料結構(data structure)。很多容器(list,dict,tuple)都是可迭代物件。但是可迭代物件不一定是一種資料結構,比如開啟的檔案或者sockets。可迭代物件可以(can)返回迭代器。每一個可迭代物件在程式碼都實現了__it

_對象_生成器

port yield iter() als ins typeerror tor list collect [可叠代對象]保存的是已經生成好的數據,占用大量的空間有__iter__方法 就是可叠代對象(Iterable) [叠代器]保存的是生成數據的方法,占用極小的空間,需

python對象

try 而且 clas style 是我 ble 但是 加載 instance 叠代器一定是可叠代對象,但是可叠代對象不一定是叠代器。 list,truple,str這些都是可叠代對象,但是他們不一定是叠代器。叠代器本身不知道自己要執行多少次,所以可以理解為不知道有多少個

物件

基於python3 迭代器 = 可迭代的物件 可迭代的物件 != 迭代器 講在前面: 返回迭代器的物件,有:open(), map(), zip()和filte()函式,這幾個函式直接返回迭代器也就是可以直接在結果中呼叫next 如: f = open('xxx.txt')

【ES6】物件

ES6 新的陣列方法、集合、for-of 迴圈、展開運算子(...)甚至非同步程式設計都依賴於迭代器(Iterator )實現。本文會詳解 ES6 的迭代器與生成器,並進一步挖掘可迭代物件的內部原理與使用方法 一、迭代器的原理 在程式語言中處理陣列或集合時,使用迴圈語句必須要初始化一個變數記錄迭

Python的容器(container)(iterator)和生成器(generator:yield)

1、容器迭代器iterator  以list容器(tuple,range,file類似)為例,list容器可以呼叫自己的__iter__()方法獲取用來迭代自己內部元素的迭代器。例如: # list容器 myList = [1, 2, 3] # 獲取list容器的迭代器 it

Python的三大神器!裝飾生成器!你精通哪個?

裝飾器   以下示例是一個無參裝飾器,為原函式添加了統計執行時間的功能 import time #定義裝飾器 def timer(func): def wrapper(*args,**kwargs): start_time = time.time() res = f

Python 生成器物件概念

生成器 在 Python 中,一邊迴圈一邊計算的機制,稱為 生成器(generator) 可以通過 next() 函式獲得 generator 的下一個返回值 生成器 的兩種表示方法: 1、將列表生成式的 [ ] 改為 ( ) [2*x for x

Pythoniteration()iterator()generator(生成器)等相關概念的理解

在閱讀Python tutorial類這一章的時候出現了iterator的概念,我是一個是程式設計的半吊子,雖然在其它語言(比如Java和C++)中也聽過這個概念,但是一直沒認真的去理解,這次我參考了一些文章,總結了一些我的看法。 首先,我在理解相關的概念的時

Python全棧學習筆記day 13:生成器

一、迭代器 字串、列表、元組、字典、集合都可以被for迴圈,說明他們都是可迭代的。 print(dir([])) #告訴我列表擁有的所有方法 ret = set(dir([]))&s

Python生成器(yield)iter函式

# 首先理解迭代器(iterators),迭代器是⼀個讓程式設計師可以遍歷的⼀個容# 器(特別是列表)的物件。然⽽,⼀個迭代器在遍歷並讀取⼀個容器的資料元素時,並不# 會執⾏⼀個迭代。這裡有三個部分要說明:# 可迭代物件(Iterable)# 迭代器(Iterator)# 迭代(Iteration)# 可迭代

搞清楚 Python物件生成器

很多夥伴對 Python 的迭代器、可迭代物件、生成器這幾個概念有點搞不清楚,我來說說我的理解,希望對需要的朋友有所幫助。 1 迭代器協議 迭代器協議是核心,搞懂了這個,上面的幾個概念也就很好理解了。 所謂迭代器協議,就是要求一個迭代器必須要實現如下兩個方法 iterator.__iter__(

python生成器__call__閉包簡單說明

1.生成器 這種一邊迴圈一邊計算的機制,稱為生成器:generator,最簡單的方法是把生成式的[]改為(). >>> l=(x * x for x in range(1, 11) if x % 2 == 0) >>> l <generator obje