Bagaimanakah penjana dalam Python berfungsi?
Apakah penjana ular sawa?
Penjana adalah lelaran khas Ia juga mempunyai kaedah __iter__
dan __next__
secara dalaman apabila menamatkan penjana, ia akan tetap menggunakan StopIteration
Pengecualian untuk keluar dari gelung, tetapi berbanding dengan iterator, penjana juga mempunyai ciri untuk menyimpan "nilai perantaraan", dan pada kali seterusnya ia dijalankan, mereka akan menggunakan "nilai perantaraan" ini untuk beroperasi. Kata kunci penjana ialah yield
Mari tulis penjana termudah di bawah.
#!/usr/bin/env python def printNums(): i = 0 while i<10: yield i i = i + 1 def main(): for i in printNums(): print(i) if __name__ == '__main__': main()
Melihat pada kod, anda mungkin tertanya-tanya apakah ini. Mengapa tidak menggunakan range
untuk menjananya, tetapi gunakan yield
, jangan risau, mari teruskan membaca. Mengapa penjana diperlukan dengan kata lain, apakah masalah yang diselesaikan oleh penjana?
Mengapa anda memerlukan penjana ular sawa?
Sebelum menjelaskan masalah ini, mari kita tulis terlebih dahulu keperluan untuk mengeluarkan data dalam 0—10000000, dan kemudian jalankannya untuk melihat tangkapan skrin memori yang dieksport operasi.
Arahan tambahan untuk memanggil maklumat memori program python
Di sini anda boleh menggunakan modul python
memory_profiler
untuk mengesan penghunian memori program.
Pasang pustaka memory_profiler
:
pip3 install memory_profiler
Kaedah penggunaannya sangat mudah, cuma tambah @profile
penghias sebelum fungsi atau kod yang perlu dikesan, contohnya:
@profile def main(): pass
Jana .dat
fail
mprof run
untuk mengeksport ikon, anda boleh menggunakan
mprof plot --output=filename
kod kes python
Dua atur cara berikut kedua-duanya mengeluarkan data antara 0-9999999 range
kemudian suapan append
ke dalam list
, dan yang kedua menggunakan iterator untuk menjana data.
main.py
Program
@profile def main(): data = list(range(10000000)) for i in data: pass if __name__ == '__main__': main()
main_2.py
Program
def printNum(): i = 0 while i < 10000000: yield i i = i + 1 @profile def main(): for i in printNum(): pass if __name__ == '__main__': main()
Jalankan Program
Kod itu juga ada, anda boleh menjalankannya seperti di atas Jalankan atur cara dan eksport maklumat memori
Lihat maklumat memori selepas dijalankan
main.py
Jalankan graf memori
main_2.py
Menjalankan graf memori
Seperti yang ditunjukkan dalam dua graf perbandingan di atas, apabila kita menindih data ke dalam senarai dan kemudian mengeluarkan ia, ia mengambil hampir 400M memori, dan Menggunakan iterator untuk mengira nilai seterusnya hanya menggunakan 16M memori.
Melalui kes di atas, kita harus tahu sebab kita menggunakan generator.
Python generator prinsip
Memandangkan ungkapan penjana yield
melibatkan mekanisme dalaman python
hak tafsiran, sukar untuk melihat kod sumbernya dan mendapatkan prinsipnya, tetapi kami Anda boleh menggunakan mekanisme jeda yield
untuk meneroka penjana.
Anda boleh menulis kod berikut:
def testGenerator(): print("进入生成器") yield "pdudo" print("第一次输出") yield "juejin" print("第二次输出") def main(): xx = testGenerator() print(next(xx)) print(next(xx)) if __name__ == '__main__': main()
Kesan selepas berjalan adalah seperti berikut
Melalui contoh di atas, digabungkan dengan penjana berikut Proses berjalan akan mendalami perasaan penjana.
Apabila python
menemui penyataan yield
, status berjalan bagi fungsi semasa akan direkodkan, pelaksanaan akan digantung dan hasilnya akan dibuang. Ia akan terus menunggu panggilan seterusnya ke kaedah __next__
Selepas kaedah dipanggil, fungsi akan terus berjalan sehingga penyataan atau fungsi yield
seterusnya tamat pada akhir pelaksanaan, apabila tiada yield
berfungsi untuk melaksanakan, <🎜 akan dilemparkan > untuk menandakan penghujung generator. StopIteration
, selain menulis penjana dalam fungsi dan mengembalikannya menggunakan python
, anda juga boleh menggunakan ungkapan penjana secara langsung, um. . . Ia mungkin abstrak, tetapi jika anda melihat kod di bawah, anda akan faham. yield
def printNums(): for i in [1,2,3,4,5]: yield i def main(): for i in printNums(): print(i) gener = (i for i in [1,2,3,4,5]) for i in gener: print(i) if __name__ == '__main__': main()
adalah bersamaan dengan fungsi (i for i in [1,2,3,4,5])
, dan jenisnya ialah penjana Kita boleh menggunakan printNums
untuk mencetaknya dan melihatnya. type
Atas ialah kandungan terperinci Bagaimanakah penjana dalam Python berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.
