Definisi: Penjana adalah seperti fungsi biasa yang menghasilkan pelbagai nilai menggunakan hasil kata kunci. Ia mengembalikan satu objek pada satu masa. Secara dalaman menggunakan iterator. Untuk mengakses elemen seterusnya seterusnya () fungsi digunakan, atau kita boleh menggunakannya untuk gelung. Sekiranya kita cuba mengakses nilai di luar julat, itu akan menaikkan nilai a StopIterasi kesilapan.
Kami akan melihat beberapa contoh untuk memahami dengan lebih baik
Cth: fungsi penjana untuk julat nilai
def range_fun (n):x = 0
semasa x < n:
hasil x
x + = 1
y = range_fun (3)
#call menggunakan untuk gelung
cetak ('Hasilkan nilai menggunakan kaedah seterusnya ()')
untuk i in range_fun (3):
mencetak (i)
#call generator menggunakan kaedah seterusnya
cetak ('Hasilkan nilai menggunakan kaedah gelung')
cetak (seterusnya (y))
cetak (seterusnya (y))
cetak (seterusnya (y))
print (next (y)) # Pengecualian Stop Iteration akan dinaikkan
Cth: Fungsi penjana untuk siri Fibonacci
def fib_fun (n):x, y = 0, 1
semasa x < n:
hasil x
x, y = y, x + y
z = fib_fun (6) #generator objek
cetak ('Hasilkan nilai menggunakan kaedah seterusnya ()')
cetak (seterusnya (z))
cetak (seterusnya (z))
cetak (seterusnya (z))
cetak (seterusnya (z))
cetak (seterusnya (z))
cetak (seterusnya (z))
cetak ('Hasilkan nilai menggunakan kaedah gelung')
untuk i in fib_fun (6):
mencetak (i)
Cth: Fungsi penjana untuk mencipta julat nilai yang diberi nilai awal dan akhir.
def my_range (permulaan, akhir):semasa = permulaan
semasa semasa < end:
hasil semasa
semasa + = 1
cetak ('Hasilkan nilai menggunakan kaedah seterusnya ()')
angka = julat_ku (1,5)
cetak (seterusnya (angka))
cetak (seterusnya (angka))
cetak (seterusnya (angka))
cetak (seterusnya (angka))
cetak ('Hasilkan nilai menggunakan kaedah gelung')
untuk nombor dalam julat_ku (1,5):
cetak (angka)
Cth: Penjana untuk mengalikan setiap nombor (kurang daripada satu nombor) dengan nombor
def gen_mulby_num (maks, bilangan):n = 0
sementara n < max:
hasil n * num
n + = 1
untuk i dalam gen_mulby_num (5,3):
mencetak (i)
Cth: Penjana untuk mencari kubus untuk pelbagai nilai
def gen_mulby_num (maks, num):n = 0
sementara n < max:
hasil n * num
n + = 1
untuk i dalam gen_mulby_num (5,3):
mencetak (i)
Cth: penjana berganda: cari kuasa dua nombor genap yang dihasilkan daripada nombor
Penjana 1: menjana nilai genap dari nombor tertentu
Penjana 2: menghasilkan nombor kuasa dua dari nilai penjana1
def gen_even (m):n = 0
sementara n < m:
jika n% 2 == 0:
hasil n
n + = 2
def gen_square (angka):
untuk angka dalam angka:
hasil 2 * bilangan
untuk n dalam gen_square (gen_even (15)):
cetak (n)
Cth: Penjana pelbagai: buat siri fibnacci dan tambah nilai 10 setiap nombor.
Generator1: menghasilkan siri fibonacci dari nombor tertentu
Penjana2: tambah setiap nombor dengan 10 dari penjana1
def gen_fib (n):x, y = 0, 1
semasa x < n:
hasil x
x, y = y, x + y
def gen_add_10 (angka):
untuk angka dalam angka:
hasil 10 + angka
untuk n dalam gen_add_10 (gen_fib (5)):
cetak (n)
Fahaman penjana:
Pemahaman penjana serupa dengan pemahaman senarai di mana senarai menggunakan tanda kurung persegi; ini menggunakan kurungan normal.
Cth:
angka = (i untuk i dalam jarak (10))mencetak (jenis (angka))
cetak (senarai (angka))
Perbezaan antara Generator dan fungsi normal:
- Penjana memberikan nilai menggunakan hasil kata kunci di mana fungsi biasa menggunakan kembali kata kunci
- Penjana bermula dari tempat ia berhenti apabila dipanggil pada waktu berikutnya. Fungsi normal melaksanakan semua pernyataan setiap masa.
- Penjana menyimpan memori kerana mengembalikan satu nilai pada satu masa. Oleh itu, kita dapat menggunakannya untuk menghasilkan nilai yang tidak terhingga.
Kesimpulan:
Generator sangat membantu ketika kita mengendalikan data besar / besar. Pada masa tertentu, ia hanya menyimpan satu bahagian data dan bukan keseluruhan data. Konsep penjana dianggap sebagai konsep maju dalam python.