Apakah Penjana di Python dan Bagaimana menggunakannya?



Ketahui apa itu generator di Python bersama dengan kelebihannya. Pelajari juga cara membuat dan menggunakannya bersama dengan pelbagai kes penggunaan.

Menghasilkan iterables atau objek yang memungkinkan melangkah ke atasnya dianggap sebagai tugas yang membebankan. Tetapi, di , pelaksanaan tugas yang menyakitkan ini berjalan lancar. Jadi mari kita teruskan dan melihat lebih dekat Generator di Python.

Berikut adalah senarai semua topik yang dibahas dalam artikel ini:





Jadi mari kita mulakan. :)

Apakah Penjana di Python?

Penjana pada dasarnya adalah fungsi yang mengembalikan objek atau barang yang dapat dilalui. Fungsi-fungsi ini tidak menghasilkan semua item sekaligus, malah menghasilkannya satu per satu dan hanya apabila diperlukan. Bila-bila masa disertakan untuk melakukan iterasi pada satu set item, fungsi penjana dijalankan. Penjana juga mempunyai beberapa kelebihan.



Kelebihan menggunakan Generator

  • Tanpa Penjana di Python, menghasilkan iterables sangat sukar dan panjang.

  • Penjana mudah dilaksanakan kerana mereka secara automatik melaksanakan __iter __ (), __next __ () dan StopIteration yang sebaliknya, perlu dinyatakan secara jelas.



  • Memori disimpan semasa item dihasilkan seperti yang diperlukan, tidak seperti biasa . Fakta ini menjadi sangat penting apabila anda perlu membuat sebilangan besar iterator. Ini juga dianggap sebagai kelebihan penjana terbesar.

  • Boleh digunakan untuk menghasilkan sejumlah barang yang tidak terhingga.

  • Mereka juga dapat digunakan untuk mengatur sejumlah operasi

Fungsi Normal vs Fungsi Generator:

Penjana di Python dicipta seperti cara anda membuat menggunakan kata kunci 'def'. Tetapi, fungsi Generator menggunakan kata kunci hasil dan bukannya pulangan. Ini dilakukan untuk memberitahu jurubahasa bahawa ini adalah berulang. Bukan hanya ini, fungsi Generator dijalankan ketika fungsi berikutnya () dipanggil dan bukan dengan namanya seperti fungsi normal. Pertimbangkan contoh berikut untuk memahaminya dengan lebih baik:

CONTOH:

def func (a): menghasilkan a = [1,2,3] b = func (a) seterusnya (b)

PENGELUARAN: [1, 2, 3]

Seperti yang anda lihat, pada output di atas, func () menggunakan kata kunci hasil dan fungsi seterusnya untuk pelaksanaannya. Tetapi, untuk fungsi normal, anda memerlukan kod berikut:

CONTOH:

def func (a): mengembalikan a = [1,2,3] func (a)

PENGELUARAN: [1, 2, 3]

Sekiranya anda melihat contoh di atas, anda mungkin tertanya-tanya mengapa menggunakan fungsi Generator ketika fungsi normal juga mengembalikan output yang sama. Jadi mari kita teruskan dan lihat bagaimana menggunakan Generator di Python.

Menggunakan fungsi Generator:

Seperti yang telah disebutkan sebelumnya, Generator di Python menghasilkan berulang-ulang satu per satu. Lihat contoh berikut:

CONTOH:

def myfunc (a): sementara a> = 3: hasilkan a = a + 1 b = myfunc (a) cetak (b) seterusnya (b)

Apabila anda menjalankan fungsi berikut, anda akan melihat output berikut:

PENGELUARAN: 4

Di sini, satu objek berulang dapat dikembalikan memenuhi syarat sementara. Selepas pelaksanaan, kawalan dipindahkan ke pemanggil. Sekiranya lebih banyak item diperlukan, fungsi yang sama perlu dijalankan lagi dengan memanggil fungsi () berikutnya.

seterusnya (b)

PENGELUARAN: 5

Pada pelaksanaan selanjutnya, fungsi akan mengembalikan 6,7, dan lain-lain. Fungsi penjana di Python melaksanakan kaedah __iter __ () dan __next __ () secara automatik. Oleh itu, anda boleh melakukan lelaran ke atas objek dengan hanya menggunakan kaedah seterusnya (). Apabila penjanaan item harus berakhir, fungsi Generator melaksanakan StopIterasi dalaman tanpa perlu risau pemanggil. Berikut adalah contoh lain:

CONTOH:

pelbagai objek kelas java
a = 2 def myfunc (a): sementara a> = 0: hasilkan a - = 1 b = myfunc (a) cetak (b) seterusnya (b)

PENGELUARAN:

StopIteration-Generators di Python-EdurekaGambar di atas menunjukkan pelaksanaan program kami diperlukan berkali-kali. Sekiranya anda cuba memanggil fungsi seterusnya sekali lagi, ia mengembalikan mesej yang menggambarkan StopIterasi telah dilaksanakan. Sekiranya anda cuba melakukan ini dengan fungsi normal, nilai yang dikembalikan tidak akan berubah atau berulang. Lihat contoh di bawah:

CONTOH:

def z (): n = 1 hasil n n = n + 3 hasil n p = z () seterusnya (p)

PENGELUARAN:

Penjana dengan gelung:

Sekiranya anda ingin menjalankan fungsi yang sama sekaligus, anda boleh menggunakan gelung ‘for’. Gelung ini membantu mengulangi objek dan setelah semua pelaksanaan melaksanakan StopIteration.

CONTOH:

def z (): n = 1 hasil n n = n + 3 hasil n untuk x dalam z (): cetak (x)

PENGELUARAN:

satu
4

Anda juga boleh menentukan ungkapan untuk menghasilkan objek berulang.

Ungkapan Penjana:

Anda juga boleh menggunakan ungkapan bersama dengan loop untuk menghasilkan iterator. Ini biasanya menjadikan generasi itu mudah dilakukan. Ungkapan penjana menyerupai pemahaman senarai dan seumpamanya fungsi lambda , ungkapan penjana membuat fungsi penjana tanpa nama.

apa kacang di jawa

Lihat contoh di bawah:

CONTOH:

a = jangkauan (6) cetakan ('Daftar Pemahaman', akhir = ':') b = [x + 2 untuk x dalam a] cetak (b) cetak ('Penjana ekspresi', akhir = ': n') c = (x + 2 untuk x dalam a) cetak (c) untuk y dalam c: cetak (y)

PENGELUARAN:

Pemahaman Senarai: [2, 3, 4, 5, 6, 7]

Ungkapan penjana:

2
3
4
5
6

Seperti yang anda lihat, dalam output di atas, ungkapan pertama adalah pemahaman senarai yang ditentukan dalam tanda kurung []. Pemahaman senarai menghasilkan senarai item yang lengkap sekaligus. Yang berikutnya adalah ungkapan penjana yang mengembalikan item yang sama tetapi satu demi satu. Ia ditentukan menggunakan tanda kurung ().


Penjanafungsi boleh digunakan dalam fungsi lain juga.Sebagai contoh:

CONTOH:

a = julat (6) cetakan ('Penjana ekspresi', akhir = ': n') c = (x + 2 untuk x dalam a) cetak (c) cetak (min (c))

PENGELUARAN:

Ungkapan penjana
2

Program di atas mencetak nilai min apabila ungkapan di atas sesuai dengan nilai a.

Kes Penggunaan:

Mari kita gunakan Penjana di kepada:

  • Hasilkan Fibonacci Series
  • Menjana Nombor

Menjana Fibonacci Series:

Siri Fibonacci seperti yang kita semua ketahui adalah rangkaian nombor di mana setiap nombor adalah jumlah dua nombor sebelumnya. Dua nombor pertama adalah 0 dan 1. Berikut adalah program penjana untuk menghasilkan siri Fibonacci:

CONTOH:

def fibo (): pertama, kedua = 0,1 sementara Benar: hasil pertama pertama, kedua = kedua, pertama + kedua untuk x dalam fibo (): jika x> 50: cetakan putus (x, akhir = ')

PENGELUARAN:

0 1 1 2 3 5 8 13 21 34

Output di atas menunjukkan siri Fibonacci dengan nilai kurang dari 50. Sekarang mari kita lihat bagaimana menghasilkan senarai nombor.

Menjana Nombor:

Sekiranya anda ingin menghasilkan nombor senarai yang ditentukan, anda boleh melakukannya menggunakan fungsi penjana. Lihat contoh berikut:

CONTOH:

a = julat (10) b = (x untuk x dalam a) cetak (b) untuk y dalam b: cetak (y)

PENGELUARAN:

0
satu
2
3
4
5
6
7
8
9

CONTOH:

a = julat (2,10,2) b = (x untuk x dalam a) cetak (b) untuk y dalam b: cetak (y)

PENGELUARAN:


2
4
6
8

Program di atas telah menghasilkan nombor genap dari 2 hingga 10. Ini membawa kita ke akhir artikel ini mengenai Generator di Python. Saya harap anda telah memahami semua topik.

Pastikan anda berlatih sebanyak mungkin dan kembalikan pengalaman anda.

Ada soalan untuk kami? Sila sebutkan di bahagian komen di blog 'Generators in Python' ini dan kami akan menghubungi anda secepat mungkin.

Untuk mendapatkan pengetahuan mendalam tentang Python bersama dengan pelbagai aplikasinya, anda boleh mendaftar secara langsung dengan sokongan 24/7 dan akses seumur hidup.