1. 程式人生 > >Python中的迭代器以及yield用法

Python中的迭代器以及yield用法

一、迭代器

1、什麼是迭代器(iter)

​ 迭代器是Python中的容器類的資料型別,可以同時儲存多個數據,取迭代器中的資料只能一個一個地取,而且取出來的資料在迭代器中就不存在了

2、迭代器中資料的來源

  • a.將其他序列轉換成迭代器
  • b.使用生成式或者生成器去產生資料

3、迭代器的建立

a.將資料轉換成迭代器
所有的序列都可以轉換成迭代器:

# 將字串轉換成迭代器
iter1 = iter('abcd')
print(iter1)  # <str_iterator object at 0x0000020DA8DDE0F0>
# 列表轉換成迭代器
iter2 = iter([1, 2, 3, 4]) print(iter2) # <list_iterator object at 0x00000287576EE1D0> # 字典轉換成迭代器 iter3 = iter({'name': 'aaa'}) print(iter3) # <dict_keyiterator object at 0x000002A883E89728>

4、獲取迭代器中的元素

  • a. next(迭代器) or 迭代器.next() - 取出迭代器中第一個元素(已經取出來的元素就再也回不到迭代器中了)當迭代器是空的時候 使用next獲取元素 會出現異常: StopIteration
  • b.通過for迴圈取出迭代器中的每個元素

二、生成器

1、什麼是生成器

生成器就是迭代器,但迭代器不一定是生成器。
生成器就是帶有yield關鍵字的函式的結果;
就是呼叫帶有yield關鍵字的函式,獲取到的結果就是一個生成器,生成器中的元素就是yield關鍵字後面的值。

2、生成器怎麼產生資料

    只要函式中有yield關鍵字,呼叫函式不會再執行函式體,而是建立一個生成器;當獲取生成器的元素的時候,才會執行函式的函式體,執行到yield語句為止,並且將yield後面的值作為結果返回,並且儲存當前執行的位置,獲取下一個元素的時候就從獲取上個元素結束的位置接著往下去執行函式,直到函式結束或者遇到yield為止;如果遇到yield就講yield後面的值作為結束返回,並且儲存當前執行的位置,如果函式結束了,就出現StopIteration異常。

生成器對應的函式,執行完成遇到yield的次數,決定了生成器能產生的資料的個數。
例如:

def func1():
    print('abc')
    yield 100

re = func1()
print(func1())   # <generator object func1 at 0x00000291296FC888>
# next(func1())  - 執行對應的函式的函式體 將yield關鍵字後邊的值作為結果
print(next(re))

三、生成式

1、生成式

什麼是生成式?
格式一: - 結果是一個生成器(迭代器)

(表示式 for 變數 in 序列)  --> 展開:
                          def func1():
                              for 變數 in 序列:
                                  yield 表示式
注意:表示式的結果就是每次迴圈生成器產生的資料
	 這兒的for迴圈可以控制生成器產生資料的個數和產生的值

格式二:

(表示式 for 變數 in 序列 if 條件語句)  -->展開:
                        def func1():
                            for 變數 in 序列:
                                if 條件語句:
                                    yield 表示式