Python3 iterator dan penjana


Lelaran ialah salah satu ciri Python yang paling berkuasa dan merupakan cara untuk mengakses elemen koleksi. .

Lelaran ialah objek yang boleh mengingati kedudukan traversal.

Objek iterator mula mengakses dari elemen pertama koleksi sehingga semua elemen diakses. Iterator hanya boleh pergi ke hadapan dan bukan ke belakang.

Iterator mempunyai dua kaedah asas: iter() dan next().

String, senarai atau objek tuple boleh digunakan untuk mencipta iterator:

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

Objek Iterator boleh dilalui menggunakan biasa untuk pernyataan:

#!/usr/bin/python3

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

Laksanakan atur cara di atas, Output keputusan adalah seperti berikut:

1 2 3 4

Anda juga boleh menggunakan fungsi next() :

#!/usr/bin/python3

import sys         # 引入 sys 模块

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象

while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

Jalankan program di atas, hasil output adalah seperti berikut:

1
2
3
4

Penjana


Dalam Python, fungsi yang menggunakan hasil dipanggil penjana.

Berbeza daripada fungsi biasa, penjana ialah fungsi yang mengembalikan lelaran dan hanya boleh digunakan untuk operasi lelaran Lebih mudah difahami bahawa penjana adalah lelaran.

Semasa proses memanggil penjana, fungsi akan menjeda dan menyimpan semua maklumat semasa yang sedang berjalan setiap kali ia menemui hasil, dan mengembalikan nilai hasil. Dan teruskan berjalan dari kedudukan semasa pada kali seterusnya kaedah next() dilaksanakan.

Contoh berikut menggunakan hasil untuk melaksanakan jujukan Fibonacci:

#!/usr/bin/python3

import sys

def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

Laksanakan program di atas dan hasil output adalah seperti berikut:

0 1 1 2 3 5 8 13 21 34 55