Python

Penghias Python

Penghias Python
Dalam artikel ini, kita akan membincangkan Python Decorators.

Definisi: Dekorasi adalah corak reka bentuk di Python. Ini adalah fungsi yang mengambil fungsi lain sebagai argumen, menambahkan beberapa fungsi padanya tanpa mengubahnya, dan mengembalikan fungsi lain.

Ini disebut menggunakan “(@)” dan diletakkan sebelum menentukan fungsi yang ingin kita hias.

sintaks:

nama @decorator
Definisi fungsi

Untuk memahami penghias, kita perlu mengetahui konsep di bawah.
Fungsi adalah objek kelas pertama. Ini berarti fungsi dapat dilewatkan sebagai argumen, dapat dikembalikan dari fungsi lain, dapat ditugaskan ke variabel, dapat didefinisikan dalam fungsi lain. Untuk pemahaman yang lebih baik, lihat contoh di bawah.

  1. Fungsi dapat disahkan sebagai hujah
    Cth:

    kenaikan def (n):
    pulangan n + 1
    def demo_funcall (fungsi):
    angka = 5
    fungsi kembali (angka)
    demo_funcall (kenaikan)

    Di sini fungsi kenaikan disahkan sebagai hujah

    contoh1.py:

    Pengeluaran:

    >> contoh ular sawa1.py

  2. Fungsi dapat dikembalikan dari fungsi lain
    Cth:

    def wish ():
    def say_wish ():
    kembali "Selamat Hari Lahir"
    kembali say_wish
    hello = ingin ()
    hello ()

    contoh2.py:

    Pengeluaran:

    >> contoh ular sawa2.py

    Di sini fungsi say_wish kembali dari fungsi keinginan

  3. Fungsi boleh diubahsuai dan diberikan kepada pemboleh ubah
    Cth:

    def tambah (a, b):
    pulangkan a + b
    sum2nos = tambah # Di sini fungsi tambah ditugaskan untuk pemboleh ubah
    jumlah2nos (5,11)

    contoh3.py:

    Pengeluaran:
    >> contoh ular sawa3.py

  4. Tentukan fungsi di dalam fungsi lain
    Cth:

    def tambah (a, b):
    def sum2 (a, b):
    pulangkan a + b
    res = jumlah2 (a, b)
    pulangan res
    tambah (10,15)

    contoh4.py:

    Pengeluaran:
    >> contoh python4.py

Penutupan:

Python membenarkan fungsi bersarang untuk mengakses ruang lingkup luar fungsi penutup.

ucapan def (mesej):
"Fungsi Enclosong"
def send_greeting ():
"Fungsi Bersarang"
cetak (mesej)
hantar_ salam ()
salam ("Selamat pagi")

contoh5.py:

Pengeluaran:

>> contoh ular sawa5.py

Setelah memahami konsep di atas sekarang, kami akan menulis contoh penghias.

Ex1: Di sini, kita akan menghiasi fungsi mesej. Mencetak msg di dalam **** tanpa mengubah fungsi asalnya, i.e., fungsi mesej.

#dekorator bermula
def print_msg (fungsi):
pembungkus def ():
fungsi ()
balut balik
#dekorator akhir
mesej def ():
cetak ("Ini adalah contoh pertama untuk menunjukkan penghias")
hello = print_msg (mesej)
hello ()

contoh6.py:

Pengeluaran:

>> contoh ular sawa6.py

Dalam bentuk paling mudah, kita boleh meletakkan penghias di atas definisi fungsi dan memanggil fungsi seperti yang ditunjukkan di bawah:

Di sini apa sahaja tali yang ingin kita hias di dalam ***, gunakan penghias ini.

Pengeluaran:

Pelbagai hiasan:

Kita boleh mempunyai banyak penghias untuk satu fungsi. Di sini penghias digunakan mengikut urutan yang kami panggil.
sintaks:
@ penghias2
@ penghias1
Definisi fungsi

Di sini penghias ke-1 akan digunakan, kemudian penghias ke-2.

Menyampaikan hujah ke fungsi penghias:

Kita boleh menyampaikan argumen ke fungsi pembungkus. Argumen diteruskan ke fungsi yang ingin kita hias.

Cth:

def deco_wish (fungsi):
def wrapper (arg1, arg2):
cetak ('Argumen yang dilalui adalah', arg1, arg2)
cetak ('*********************')
fungsi (arg1, arg2)
cetak ('*********************')
balut balik
@deco_wish
keinginan def (a1, a2):
cetak (a1, a2)
berharap ('Selamat', 'Pagi')
berharap ('Baik', 'Petang')

contoh7.py:

Pengeluaran:

>> contoh python7.py

Hantarkan jumlah argumen yang berubah-ubah ke fungsi penghias:

Kita boleh menyampaikan sebilangan argumen menggunakan * args (Argumen bukan kata kunci seperti nombor) dan ** kwargs (argumen kata kunci seperti kamus). Kedua-duanya adalah argumen kedudukan dan menyimpan argumen dalam pemboleh ubah args dan kwargs.

Catatan: Di sini, kita dapat menggunakan nama apa pun dan bukan args dan kwarg, tetapi nama-nama ini disarankan untuk digunakan.

Cth:

def dec_var_args (fungsi):
def wrapper (* args, ** kwargs):
cetak ('Argumen bukan kata kunci adalah', args)
cetak ('Argumen kata kunci adalah', kwargs)
fungsi (* args)
balut balik
@ dec_var_args
def fun_non_key_args (* args):
untuk saya di args:
mencetak (i)
@ dec_var_args
def fun_key_args ():
cetak ("Hujah kata kunci")
fun_non_key_args ((4,5,6))
fun_key_args (fname = 'Anand', lname = 'Matematik')

contoh8.py:

Pengeluaran:

>> contoh python8.py

Ex2: Andaikan kita mempunyai 2 fungsi
Fungsi1: Hitung jumlah nombor dari senarai yang diberikan
Fungsi2: Darabkan setiap nombor dengan 2 dan tambahkannya ke senarai nombor yang diberikan
Sekiranya kita ingin mengira masa yang diambil oleh setiap orang untuk pelaksanaannya, boleh melakukannya dengan 2 cara

  1. Letakkan kod di antara waktu mula dan akhir dalam setiap fungsi
  2. Tulis penghias untuk mengira masa

Lihat kod di bawah yang diselesaikan menggunakan penghias:

#dekorator bermula
exe_time_calc (func):
def wrapper (arg):
start_time = masa masa.masa tarikh.sekarang ()
func (arg)
end_time = masa masa.masa tarikh.sekarang ()
cetak ("Masa yang diperlukan untuk melaksanakan fungsi" + func.__nama__ + "is" + str (end_time - end_time))
balut balik
#dekorator akhir
@exe_time_calc
def cal_avg (data):
jumlah = 0
untuk i dalam data:
jumlah + = i
cetak ("Rata-rata senarai nombor yang diberikan adalah", jumlah // len (data))
@exe_time_calc
def mul_by_2 (data):
jumlah = 0
untuk i dalam data:
jumlah + = + (i * 2)
cetak ("Jumlah semua nombor setelah darab dengan 2 adalah", jumlah)
cal_avg ([10,20,30,40,50])
mul_by_2 ([10,20,30,40,50])

contoh9.py:

Pengeluaran:

>> contoh ular sawa9.py

Penghias di atas boleh digunakan untuk mengira waktu pelaksanaan untuk sebarang fungsi. Dengan menggunakan penghias, kita dapat mengelakkan kod berulang ketika kita mempunyai syarat untuk menghitung waktu pelaksanaan untuk meletakkan penghias di atas definisi fungsi.

Kesimpulan:

Penghias mengubah fungsi fungsi / kaedah tanpa mengubah kod asal fungsi sedang dihiasi. Dengan menggunakan ini, kita dapat mengelakkan menulis kod berulang. Mengetahui konsep penghias akan menjadikan kita kuat dalam python. Kita boleh menggunakan penghias dalam kes berikut:

Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...
Permainan Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar anda ketika menggunakan Linux-ia juga dapat menjadi sumber hiburan kerana anda dapat menggunakannya untuk m...