Dalam artikel ini, kami akan menerangkan kepada anda apa itu penjana dan penghias dalam Python.
Penjana telah menjadi bahagian penting Python sejak diperkenalkan dalam PEP 255.
Penjana dalam Python ialah rutin khas yang boleh digunakan untuk mengawal tingkah laku lelaran gelung. Penjana adalah seperti fungsi yang mengembalikan tatasusunan. Penjana mempunyai parameter yang boleh kita panggil dan menjana urutan nombor. Tetapi tidak seperti fungsi yang mengembalikan keseluruhan tatasusunan, penjana menjana nilai satu demi satu, memerlukan kurang memori.
Sebarang fungsi Python dengan kata kunci "hasil" boleh dipanggil penjana. Fungsi ular sawa biasa memulakan pelaksanaan dari baris pertama dan berterusan sehingga kami menerima penyataan pemulangan atau pengecualian atau fungsi tamat, bagaimanapun, sebarang pembolehubah tempatan yang dibuat semasa skop fungsi dimusnahkan dan tidak boleh diakses lagi. Untuk penjana, apabila ia menemui kata kunci hasil, keadaan fungsi akan dibekukan dan semua pembolehubah akan disimpan dalam ingatan sehingga penjana dipanggil semula.
Kami boleh menggunakan penjana berdasarkan iterator atau memanggilnya secara eksplisit menggunakan kata kunci "next".
Biasanya penjana dalam Python -
Gunakan definisi kata kunci def
Gunakan kata kunci hasil
Boleh mengandungi berbilang kata kunci hasil.
Mengembalikan lelaran.
Penjana ialah fungsi yang mengembalikan objek penjana Boleh diulang. Oleh kerana nilai dalam objek penjana diambil satu demi satu dan bukannya keseluruhan senarai sekaligus, anda boleh menggunakan fungsi gelung for, next(), atau list() untuk mendapatkan nilai sebenar.
Penjana boleh dibuat menggunakan fungsi penjana dan ekspresi penjana.
Fungsi penjana adalah serupa dengan fungsi biasa, tetapi bukannya mengembalikan nilai, ia mempunyai kata kunci hasil.
Untuk mencipta fungsi penjana, tambah kata kunci hasil. Contoh berikut menunjukkan cara menulis fungsi penjana.
Penjana dengan iterator
# creating a function def generatorExample(): yield "T" yield "U" yield "T" yield "O" yield "R" yield "I" yield "A" yield "L" yield "S" # calling the generatorExample() function which is created above result = generatorExample() # Traversing in the above result(generator object) for k in result: # Printing the corresponding value print(k)
T U T O R I A L S
Baca nilai keluaran daripada penjana
Kaedahlist(), for-loop dan next() boleh digunakan untuk membaca nilai daripada objek penjana.
next() mengembalikan item seterusnya dalam senarai, tatasusunan atau objek. Apabila senarai kosong dan next() dipanggil, ia mengembalikan ralat dengan isyarat stopIteration. Ralat ini menunjukkan bahawa tiada lagi entri dalam senarai.
# creating a function that accepts a number as an argument def oddNumbers(num): # traversing till that number passed for i in range(num): # checking whether the iterator index value is an odd number if (i%2!=0): # getting the iterator index value if the condition is true using the yield keyword yield i # calling the above function to get the odd numbers below 8 result = oddNumbers(8) # calling the next items in the result list print(next(result)) print(next(result)) print(next(result)) print(next(result)) # throws an error since the list has no more elements print(next(result))
1 3 5 7 Traceback (most recent call last): File "main.py", line 17, in <module> print(next(result)) StopIteration
Python menyediakan alat hebat yang dipanggil Decorator untuk menambahkan fungsi pada kod sedia ada.
Ini juga dipanggil metaprogramming kerana satu bahagian program cuba mengubah suai bahagian lain program pada masa penyusunan.
Penghias menggunakan fungsi sebagai parameter dalam fungsi lain dan kemudian memanggil fungsi tersebut di dalam fungsi pembungkus.
@tutorials_decorator def python_decorator(): print("Hello tutorials Point") '''Above code is equivalent to - def python_decorator(): print("Hello tutorials Point") python_decorator = tutorials_decorator(python_decorator)'''
Tutorials_decorator di sini ialah fungsi boleh panggil yang menambahkan beberapa kod di atas satu lagi fungsi boleh panggil python_decorator dan mengembalikan fungsi pembungkus. p>
Di sinifunc ialah fungsi berhias, python_decorator ialah fungsi yang digunakan untuk menghiasinya
# defining a decorator def python_decorator(func): def wrapper(): print("Text before calling the function") func() print("Text after calling the function") return wrapper def tutorials_decorator(): print("Hello tutorials Point!!!") tutorials_decorator = python_decorator(tutorials_decorator) tutorials_decorator()
Text before calling the function Hello tutorials Point!!! Text after calling the function
python_decorator(func) - Ini ialah fungsi penghias; ia menerima fungsi lain sebagai hujah dan "menghiasi"nya, bermakna ia mengubah suai dan mengembalikan versi yang diubah suai.
wrapper - Kami mentakrifkan satu lagi fungsi dalaman yang dipanggil wrapper di dalam fungsi penghias. Ini adalah fungsi sebenar yang mengubah suai fungsi yang diluluskan func dengan membungkusnya.
Fungsi pembalut dikembalikan oleh penghias.
tutorials_decorator - Ini adalah fungsi biasa yang perlu kita hias. Di sini cuma cetak kenyataan mudah.
Corak penghias yang diterangkan di atas popular dalam komuniti Python, tetapi ia agak rumit. Kita perlu menulis nama fungsi tiga kali, dan hiasan tersembunyi di bawah definisi fungsi.
Oleh itu, Python telah menambah cara baharu untuk menggunakan penghias, termasuk gula sintaksis dengan menggunakan simbol @.
@decorator def func(arg1, arg2, ...): pass
Syntactic sugar ialah sintaks yang digunakan dalam bahasa pengaturcaraan untuk menjadikan kandungan lebih mudah dibaca atau dinyatakan.
Contoh berikut melakukan operasi yang sama seperti contoh sebelumnya -
# defining a decorator def python_decorator(func): def wrapper(): print("Text before calling the function") func() print("Text after calling the function") return wrapper @python_decorator def tutorials_decorator(): print("Hello tutorials Point!!!") tutorials_decorator()
Text before calling the function Hello tutorials Point!!! Text after calling the function
Sama seperti contoh sebelum ini, cuma bezanya kami menggunakan @python_decorator dan bukannya
tutorials_decorator = python_decorator(tutorials_decorator)
Dalam artikel ini, kami melihat secara ringkas tentang penjana dan penghias dalam Python. Kami juga menunjukkan cara menggunakan penjana dan penghias semasa menulis kod.
Atas ialah kandungan terperinci Apakah penjana dan penghias dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!