Rumah >pembangunan bahagian belakang >Tutorial Python >Memahami penghias python, dengan contoh

Memahami penghias python, dengan contoh

Lisa Kudrow
Lisa Kudrowasal
2025-02-19 09:51:10233semak imbas

Understanding Python Decorators, with Examples

Artikel ini akan membantu anda memahami konsep penghias dalam pengaturcaraan Python dan cara menggunakannya dengan baik. Kami akan merangkumi apa yang dihias Python, apa sintaks mereka, bagaimana untuk mengenali mereka dalam skrip atau rangka kerja, dan bagaimana untuk menerapkannya sendiri.

Penghias fungsi di Python hanyalah fungsi yang mengambil fungsi lain sebagai hujah, memperluaskan fungsi fungsi yang dihiasi tanpa mengubah strukturnya. Penghias membungkus fungsi lain, meningkatkan tingkah lakunya, dan kemudian mengembalikannya.

Konsep penghias dalam Python membantu mengekalkan kod kering (jangan ulangi diri anda). Penghias fungsi mengelakkan pertindihan yang tidak perlu dalam asas kod, kerana beberapa coretan kod pendua boleh digabungkan untuk membentuk penghias fungsi. Semasa anda maju dalam pembangunan dengan Python, penghias boleh membantu dengan analisis dan dokumentasi. Mereka juga penting untuk menubuhkan pengesahan dan pemeriksaan runtime.

Dalam apa yang berikut, saya menganggap anda mempunyai pemahaman asas mengenai fungsi dan pengaturcaraan Python, dan anda mempunyai sekurang -kurangnya Python 3.8 yang dipasang pada peranti anda.

mata utama

    penghias python adalah fungsi yang mengambil fungsi lain sebagai hujah, yang meningkatkan fungsinya tanpa mengubah strukturnya. Mereka membantu menyimpan kod kering (jangan ulangi diri anda) dengan mengelakkan pertindihan yang tidak perlu dan boleh digunakan untuk analisis, pembalakan, pengesahan, dan pemeriksaan runtime.
  • Dalam python, fungsi penghias ditakrifkan oleh fungsi luaran yang menerima parameter fungsi dan fungsi bersarang yang membungkus fungsi menghias di dalam fungsi luaran. Penghias mudah dikenal pasti oleh awalan "@" sebelum fungsi penghias. Parameter boleh dihantar ke fungsi pembalut dan kemudian ke fungsi yang dihiasi.
  • Penghias boleh dirantai dalam python, yang bermaksud bahawa fungsi boleh dihiasi dengan pelbagai penghias. Ini dilakukan dengan menyusun satu penghias di atas yang lain. Kes penggunaan praktikal untuk penghias python termasuk pembalakan masa, memori, dan penghias python terbina dalam seperti @classmethod, @staticmethod, dan @property.

perkara yang perlu diketahui sebelum menyelidiki penghias python

Dalam Python, fungsi adalah warga kelas pertama, yang bermaksud mereka boleh menerima parameter atau diluluskan sebagai parameter. Untuk memahami sepenuhnya konsep penghias, anda perlu mengetahui perkara berikut.

Fungsi

adalah objek, yang bermaksud ia boleh diberikan kepada pembolehubah lain

<code class="language-python">def greet():
    print("Hello John")

greet_john = greet
greet_john()
>>>
Hello John</code>
Sentiasa ingat bahawa dalam Python semuanya adalah objek. Dengan cara yang sama anda memberikan nilai kepada pembolehubah, fungsi juga boleh diberikan kepada pembolehubah jika perlu. Ini penting apabila anda belajar tentang penghias.

Fungsi

boleh kembali

dari fungsi lain

<code class="language-python">def greet():
    def greeting_at_dawn():
        print("Good morning")

    return greeting_at_dawn

salute = greet()
salute()
>>>
Good morning</code>
Fungsi dalaman dalam python boleh dikembalikan dari fungsi luaran. Ini adalah sebahagian daripada konsep pengaturcaraan berfungsi yang akan anda hadapi.

fungsi boleh diluluskan sebagai parameter fungsi lain

<code class="language-python">def greet_some(func):
    print("Good morning", end=' ')
    func()

def say_name():
    print("John")

greet_some(say_name)
>>>
Good morning John</code>
Fungsi yang menerima parameter fungsi dipanggil fungsi pesanan yang lebih tinggi.

Pastikan anda menyimpan perkara -perkara di atas ketika belajar melaksanakan penghias dan menggunakannya dengan berkesan dalam program Python.

mekanisme operasi penghias python

Fungsi penghias mudah bermula dengan definisi fungsi, fungsi penghias, dan kemudian fungsi bersarang dalam fungsi pembalut luaran.

Sentiasa simpan dua perkara berikut dalam fikiran ketika menentukan penghias:

    Untuk melaksanakan penghias, tentukan fungsi luaran yang menerima parameter fungsi.
  1. Nest fungsi pembalut dalam fungsi penghias luaran, yang juga membungkus fungsi penghias.
Berikut adalah fungsi penghias yang paling asas seperti dalam coretan kod berikut:

<code class="language-python">def greet():
    print("Hello John")

greet_john = greet
greet_john()
>>>
Hello John</code>
Lihat kod di atas, fungsi luaran

(juga dikenali sebagai penghias) menerima parameter fungsi increase_number. func adalah fungsi pembalut yang mengandungi fungsi yang dihiasi. Penghias ditugaskan kepada pemboleh ubah lain. Inilah sintaks penghias apabila menggunakan Python Decorator. Walau bagaimanapun, terdapat cara yang lebih mudah untuk mewakili penghias. increase_by_one get_number Mudah untuk mengenali fungsi penghias mudah apabila ia bermula dengan @ awalan dan menggabungkan fungsi menghias di bawahnya. Contoh terdahulu boleh ditakrifkan seperti berikut:

Contoh -contoh ini menunjukkan bahawa penghias memanjangkan fungsi parameter fungsinya.
<code class="language-python">def greet():
    def greeting_at_dawn():
        print("Good morning")

    return greeting_at_dawn

salute = greet()
salute()
>>>
Good morning</code>

fungsi penghias dengan parameter

Dalam beberapa kes, anda mungkin perlu lulus parameter ke penghias. Penyelesaian masalah ini adalah untuk lulus hujah ke fungsi pembalut dan kemudian lulus ke fungsi yang dihiasi. Lihat contoh berikut:

Parameter lulus ke fungsi dalaman atau bersarang menjadikannya lebih kuat dan mantap kerana ia memberikan lebih banyak fleksibiliti untuk memanipulasi fungsi yang dihiasi. Mana -mana bilangan parameter (*args) atau parameter kata kunci (** kwargs) boleh dihantar ke fungsi yang dihiasi. *Args membolehkan pengumpulan semua parameter kedudukan, manakala ** kwargs digunakan untuk semua parameter kata kunci yang diperlukan semasa panggilan fungsi. Mari kita lihat contoh mudah lain:
<code class="language-python">def greet_some(func):
    print("Good morning", end=' ')
    func()

def say_name():
    print("John")

greet_some(say_name)
>>>
Good morning John</code>

Dalam contoh di atas, *args mengambil parameter kedudukan sebagai tuple untuk membentuk objek yang boleh dimakan, manakala ** kwargs membentuk kamus parameter kata kunci.
<code class="language-python">def increase_number(func):
    def increase_by_one():
        print("incrementing number by 1 ...")
        number_plus_one = func() + 1
        return number_plus_one
    return increase_by_one

def get_number():
    return 5

get_new_number = increase_number(get_number)
print(get_new_number())
>>>
incrementing number by 1 ...
6</code>

Pelbagai penghias atau panggilan rantai di Python

Apabila menggunakan penghias fungsi dalam projek Python, terdapat beberapa pilihan untuk diterokai. Kes penggunaan lain adalah untuk menghubungkan penghias (dua atau lebih) ke fungsi. Fungsi boleh dihiasi dengan pelbagai penghias (pelbagai penghias), yang dicapai dengan menyusun satu penghias di atas yang lain, mengikut urutan yang tidak relevan. Terlepas dari urutan di mana pelbagai penghias disusun, anda akan mendapat output yang sama seperti yang ditunjukkan dalam contoh berikut:

<code class="language-python">def increase_number(func):
    def increase_by_one():
        print("incrementing number by 1 ...")
        number_plus_one = func() + 1
        return number_plus_one
    return increase_by_one

@increase_number
def get_number():
    return 5

print(get_number())
>>>
incrementing number by 1 ...
6</code>
Kes penggunaan praktikal untuk Python Decorator

Cara yang sangat popular untuk menggunakan penghias di Python adalah sebagai logger masa. Ini membantu pengaturcara memahami berapa lama masa yang diperlukan untuk melaksanakan fungsi untuk mengukur kecekapan.

Hafalan adalah satu lagi cara yang sejuk untuk menggunakan penghias di Python. Apabila pengiraan dilakukan kemudian, hasil dari panggilan berulang ke fungsi dapat diingati dengan mudah tanpa sebarang perubahan. Anda hanya boleh menggunakan penghias untuk menghafal fungsi tersebut.

penghias python terbina dalam seperti @classmethod, @staticmethod, dan @property sangat popular dalam mod penghias OOP Python.

Kesimpulan

Python Decorators menguatkuasakan prinsip kering kejuruteraan perisian kerana ia digunakan sebagai kod yang boleh diguna semula. Fikirkan tentang berapa banyak fungsi Python yang boleh anda refactor ke dalam penghias. Dalam artikel ini, kami meneroka pelbagai bentuk penghias. Terdapat juga penghias kelas, walaupun kami tidak menutupnya di sini.

penghias menjadikannya lebih mudah untuk menambah fungsi tambahan kepada fungsi, kaedah, atau kelas mudah tanpa mengubah kod sumber mereka sambil mengekalkan kod kering. Cuba menghias fungsi diri anda untuk lebih memahami corak penghias.

Soalan Lazim Mengenai JavaScript Decorators

Apakah penghias JavaScript?

JavaScript Decorator adalah corak reka bentuk dan ciri yang diperkenalkan dalam ECMAScript 2016 (ES6) dan kemudian versi JavaScript. Ia membolehkan anda mengubah suai atau meningkatkan tingkah laku fungsi, kaedah, atau kelas dengan menggunakan komen atau metadata kepadanya. Penghias biasanya digunakan dalam pelbagai perpustakaan dan kerangka JavaScript, seperti Angular dan Mobx. Penghias biasanya dilaksanakan sebagai fungsi yang membungkus atau "menghiasi" fungsi objektif atau kelas. Mereka digunakan untuk menambah fungsi atau mengubah tingkah laku sasaran tanpa mengubah kod terasnya. Penghias boleh digunakan untuk fungsi, kaedah, atau kelas, dan ia ditunjukkan oleh simbol @ diikuti dengan nama penghias.

Mengapa kita memerlukan penghias JavaScript?

Decorators in JavaScript adalah tambahan yang berharga kepada bahasa untuk alasan berikut: Mereka mempromosikan modulariti dan kebolehgunaan semula kod dengan membenarkan pemaju memisahkan kebimbangan silang dari logik teras fungsi dan kaedah. Ini menggalakkan asas kod bersih dengan mengurangkan kekeliruan dan meningkatkan kebolehbacaan, menjadikan kod lebih mudah untuk mengekalkan dan memahami. Penghias memainkan peranan penting dalam mematuhi prinsip pemisahan kebimbangan, kerana ia membolehkan anda memisahkan aspek seperti keselamatan, pembalakan, dan konfigurasi dari logik aplikasi teras. Penghias membawa konsistensi ke pangkalan kod anda dengan memastikan tingkah laku atau dasar tertentu digunakan secara konsisten untuk fungsi dan kaedah. Mereka menyediakan cara yang fleksibel untuk mengkonfigurasi dan menyesuaikan tingkah laku fungsi, yang membolehkan perubahan mudah atau lanjutan fungsi tanpa mengubahsuai kod teras. Dengan menyokong pengaturcaraan berorientasikan aspek (AOP), penghias membantu secara sistematik menangani kebimbangan silang, menghasilkan kod yang lebih bersih dan lebih teratur. Penghias juga semakin diterima oleh perpustakaan dan rangka kerja pihak ketiga, menjadikan mereka kemahiran yang mesti dimiliki untuk menggunakan alat JavaScript moden yang cekap. Secara keseluruhannya, penghias meningkatkan organisasi kod, kebolehbacaan, kebolehkerjaan, dan skalabiliti, menjadikannya aset berharga untuk pemaju JavaScript.

Apakah perbezaan antara penghias python dan penghias JavaScript?

Python dan JavaScript Decorators berkongsi konsep mengubahsuai fungsi atau tingkah laku kaedah, tetapi berbeza dalam sintaks dan penggunaan. Python menggunakan sintaks @decorator_function dan boleh digunakan untuk fungsi dan kelas untuk pelbagai tujuan. JavaScript Decorator menggunakan sintaks @decorator dan digunakan terutamanya untuk kelas, kaedah, dan sifat. Penghias python lebih serba boleh, manakala penghias JavaScript adalah kelas-centric dan diperkenalkan sebagai sebahagian daripada ECMAScript 2016.

Output mengekalkan pemformatan imej asal dan tidak mengubah makna teras teks input.

Atas ialah kandungan terperinci Memahami penghias python, dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn