Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah penjana dan penghias dalam Python?

Apakah penjana dan penghias dalam Python?

王林
王林ke hadapan
2023-09-10 22:49:02967semak imbas

Apakah penjana dan penghias dalam Python?

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.

Fungsi penjana

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

Contoh

# 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)

Output

T
U
T
O
R
I
A
L
S

Baca nilai keluaran daripada penjana

Kaedah

list(), for-loop dan next() boleh digunakan untuk membaca nilai daripada objek penjana.

Gunakan next() untuk membaca nilai daripada objek penjana

Kaedah

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.

Contoh

# 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))

Output

1
3
5
7
Traceback (most recent call last):
File "main.py", line 17, in <module>
    print(next(result))
StopIteration

Penghias dalam Python

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.

Tatabahasa

@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>

Contoh

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()

Output

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.

Penghias Sintaks

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 @.

Tatabahasa

@decorator
def func(arg1, arg2, ...):
   pass

Syntactic sugar ialah sintaks yang digunakan dalam bahasa pengaturcaraan untuk menjadikan kandungan lebih mudah dibaca atau dinyatakan.

Contoh

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()

Output

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)

Kesimpulan

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam