Python

Dekorator Python

Dekorator Python
Pada artikel ini, kita akan membahas Dekorator Python.

Definisi: Dekorator adalah pola desain dengan Python. Ini adalah fungsi yang mengambil fungsi lain sebagai argumen, menambahkan beberapa fungsi ke dalamnya tanpa memodifikasinya, dan mengembalikan fungsi lain.

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

sintaksis:

@nama dekorator
Definisi fungsi

Untuk memahami dekorator, kita perlu mengetahui konsep di bawah ini.
Fungsi adalah objek kelas satu. Artinya suatu fungsi dapat diteruskan sebagai argumen, dapat dikembalikan dari fungsi lain, dapat ditetapkan ke variabel, dapat didefinisikan dalam fungsi lain. Untuk pemahaman yang lebih baik, lihat contoh di bawah ini.

  1. Sebuah fungsi dapat dilewatkan sebagai argumen
    Ex:

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

    Di sini fungsi kenaikan dilewatkan sebagai argumen

    Contoh 1.py:

    Keluaran:

    >> contoh python1.py

  2. Fungsi dapat dikembalikan dari fungsi lain
    Ex:

    keinginan pasti():
    def say_wish():
    kembali "Selamat Ulang Tahun"
    kembali say_wish
    halo = keinginan()
    Halo()

    contoh2.py:

    Keluaran:

    >> contoh python2.py

    Di sini fungsi say_wish dikembalikan dari fungsi keinginan

  3. Fungsi dapat dimodifikasi dan ditugaskan ke variabel
    Ex:

    def tambahkan(a,b):
    kembalikan a +b
    sum2nos = add # Di sini fungsi add ditugaskan ke variabel
    jumlah2no(5,11)

    contoh3.py:

    Keluaran:
    >> contoh python3.py

  4. Tentukan fungsi di dalam fungsi lain
    Ex:

    def tambahkan(a,b):
    def jumlah2(a,b):
    kembalikan a + b
    res = jumlah2(a,b)
    kembalikan res
    tambahkan(10,15)

    contoh4.py:

    Keluaran:
    >> contoh python4.py

Penutupan:

Python memungkinkan fungsi bersarang untuk mengakses lingkup luar dari fungsi terlampir.

salam def (pesan):
"Fungsi Enclosong"
def send_greeting():
"Fungsi Bersarang"
cetak (pesan)
kirim_salam()
salam("Selamat pagi")

contoh5.py:

Keluaran:

>> contoh python5.py

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

Contoh1: Di sini, kita akan mendekorasi fungsi pesan. Mencetak pesan di dalam **** tanpa mengubah fungsi aslinya, i.e., fungsi pesan.

#dekorator mulai
def print_msg(fungsi):
def pembungkus():
fungsi()
bungkus kembali
#dekorator selesai
def pesan():
print("Ini adalah contoh pertama untuk mendemonstrasikan dekorator")
halo = print_msg(pesan)
Halo()

contoh6.py:

Keluaran:

>> contoh python6.py

Dalam bentuk paling sederhana, kita dapat menempatkan dekorator di atas definisi fungsi dan memanggil fungsi seperti yang ditunjukkan di bawah ini:

Di sini tali apa pun yang ingin kita hias di dalamnya, gunakan dekorator ini.

Keluaran:

Beberapa dekorator:

Kami dapat memiliki beberapa dekorator untuk satu fungsi. Di sini dekorator diterapkan dalam urutan yang kami sebut.
sintaksis:
@dekorator2
@dekorator1
Definisi fungsi

Di sini dekorator pertama akan diterapkan, kemudian dekorator kedua.

Melewati argumen ke fungsi dekorator:

Kita dapat meneruskan argumen ke fungsi pembungkus. Argumen yang diteruskan ke fungsi yang ingin kita hias.

Ex:

def deco_wish(fungsi):
pembungkus def (arg1, arg2):
print ('Argumen yang diteruskan adalah ',arg1, arg2)
cetak ('*********************')
fungsi (arg1, arg2)
cetak ('*********************')
bungkus kembali
@deco_wish
keinginan def (a1, a2):
cetak(a1,a2)
berharap ('Selamat', 'Pagi')
berharap ('Selamat', 'Siang')

contoh7.py:

Keluaran:

>> contoh python7.py

Lewati jumlah variabel argumen ke fungsi dekorator:

Kita dapat melewatkan sejumlah argumen menggunakan *args (Argumen non-kata kunci seperti angka) dan **kwargs (argumen kata kunci seperti kamus). Keduanya adalah argumen posisi dan menyimpan argumen dalam variabel args dan kwargsgs.

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

Ex:

def dec_var_args(fungsi):
def wrapper(*args, **kwargs):
print('Argumen non kata kunci adalah', args)
print('Argumen kata kunci adalah', kwargs)
fungsi(*args)
bungkus kembali
@ dec_var_args
def fun_non_key_args(*args):
untuk saya di args:
cetak (i)
@ dec_var_args
def fun_key_args():
print("Argumen kata kunci")
fun_non_key_args((4,5,6))
fun_key_args(fname='Anand', lname='Matematika')

contoh8.py:

Keluaran:

>> contoh python8.py

Contoh2: Misalkan kita memiliki 2 fungsi
Fungsi1: Hitung jumlah angka dari daftar yang diberikan
Fungsi2: Kalikan setiap angka dengan 2 dan tambahkan ke daftar angka yang diberikan
Jika kita ingin menghitung waktu yang dibutuhkan oleh masing-masing untuk eksekusi, dapat dilakukan dengan 2 cara

  1. Tempatkan kode di antara waktu mulai dan berakhir di setiap fungsi
  2. Tulis dekorator untuk menghitung waktu

Lihat kode di bawah ini diselesaikan menggunakan dekorator:

#dekorator mulai
exe_time_calc(fungsi):
pembungkus def (arg):
start_time = waktu tanggal.tanggal Waktu.sekarang()
fungsi(arg)
end_time = waktu tanggal.tanggal Waktu.sekarang()
print("Waktu yang dibutuhkan untuk menjalankan fungsi " + func.__name__ + " adalah " + str(end_time - end_time))
bungkus kembali
#dekorator selesai
@exe_time_calc
def cal_avg(data):
jumlah = 0
untuk saya dalam data:
jumlah += i
print("Rata-rata daftar bilangan yang diberikan adalah ", sum//len(data))
@exe_time_calc
def mul_by_2(data):
jumlah = 0
untuk saya dalam data:
jumlah += + (i*2)
print("Jumlah semua bilangan setelah dikalikan 2 adalah ", jumlah)
cal_avg ([10,20,30,40,50])
mul_by_2([10,20,30,40,50])

contoh9.py:

Keluaran:

>> contoh python9.py

Dekorator di atas dapat digunakan untuk menghitung waktu eksekusi untuk salah satu fungsi. Dengan menggunakan dekorator, kita dapat menghindari kode berulang ketika kita memiliki persyaratan untuk menghitung waktu eksekusi untuk menempatkan dekorator di atas definisi fungsi.

Kesimpulan:

Dekorator mengubah fungsionalitas suatu fungsi/metode tanpa mengubah kode asli dari fungsi yang sedang didekorasi. Dengan menggunakan ini, kita dapat menghindari penulisan kode berulang. Mengetahui konsep dekorator akan membuat kita kuat di python. Kita dapat menggunakan dekorator dalam kasus di bawah ini:

Tiru klik Mouse dengan mengarahkan mouse menggunakan Clickless Mouse di Windows 10
Menggunakan mouse atau keyboard dalam posisi yang salah dari penggunaan yang berlebihan dapat menyebabkan banyak masalah kesehatan, termasuk keteganga...
Tambahkan gerakan Mouse ke Windows 10 menggunakan alat gratis ini
Dalam beberapa tahun terakhir, komputer dan sistem operasi telah berkembang pesat. Ada saat ketika pengguna harus menggunakan perintah untuk menavigas...
Kontrol & kelola gerakan mouse di antara beberapa monitor di Windows 10
Manajer Mouse Tampilan Ganda memungkinkan Anda mengontrol & mengonfigurasi gerakan mouse di antara beberapa monitor, dengan memperlambat gerakannya di...