cari

python装饰器是什么

Jul 04, 2019 am 10:51 AM

python装饰器是什么

首先,什么是装饰器? 

比较官方的解释是:

装饰器是用来管理和调用函数和类的一个可调用对象,也就是说分为函数装饰器和类装饰器

这个定义函数我自己通俗化了一点,不然更加看不懂,其实我还有一句更加概括的话,可以解释装饰器:

装饰器就是对被装饰的对象(函数、类)进行重构的,其可以在不改变原来对象的情况下调用对象时执行重构后的行为

这里你可能就糊涂了,看不懂 

没关系我们慢慢来!!! 

首先,装饰器的语法你肯定知道

def decorator(f):
    def wrapper(x,y):
        return x+y
    return wrapper
@decorator
def func(x,y):
    return 1
func(3,4)

那,看这段代码,你可能根据上面你有几个疑问: 

一、decorator是什么意思? 

二、这里重构的行为是什么? 

三、整个装饰的行为或者说流程是怎么样的?

我们看上面那一段代码,很显然,说过装饰器就是一个可调用对象,这个没问题吧,在上面的装饰器它就是一个函数。 

重构的行为是什么? 

上面的一段代码的重构行为就是讲func的执行代码替换成了wrapper的执行代码,也就是说,代码的最终输入是 7 而不是 1。

其实上面的两个问题是废话,我们解决了第三个问题,自然而然的就理解了! 

好了,在继续看之前我们记住一句话: 

装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数

一定要仔细看这句话,理解加记忆! 

在上面那一段代码中

装饰器是: decorator 

返回的可调用对象是: wrapper 

被装饰的对象是 :func

好了,你先在套这个你去看看这个这个函数的执行流程

当然,这时候你还会有一个疑问: 

当调用func(3,4)的时候发生了什么? 

此时:返回的可调用对象(wrapper)给了func,你也可以理解为现在的func的代码是

def func(x,y):
    return x+y

这时的func就完全不是自己本身定义的func的,它是不是在某种意义上算是被重构了!

到这里你是不是理解了什么是装饰器,应该是理解了!

不过我们还没有结束,因为我要让你彻底的了解什么是装饰器!

之前我们说过,不止有函数装饰器,还有类装饰器,那接下来我们就看看类装饰器是怎么工作的,我还是要把之前那段话贴在这里,你别忘了! 

装饰器本身接受被装饰的对象,装饰器返回的可调用对象接受被装饰对象的所有参数

class Decorator:
    def __init__(self,f):
        self.func = f
    def __call__(self,x,y):
        return self.func(x,y) + 1
@Decorator
def func(x,y):
    return x+y
func(3,4)
# 你来想想这时候的结果是什么?

我们来一步步的分析一下, 

首先,我们说装饰器只接受被装饰的对象做参数,也就是说此时有

Decorator(func)
 # 这段代码对应着第一句话
 # 接下来是
 func(3,4)
 # 这句话是不是触动了__call__方法
 # 接下来就是第二句话:返回的可调用对象接受被装饰对象的所有参数
 # 所以3,4就被传递给了__call__方法
 # 此时的func是什么
 return self.func(x,y) + 1
 # 也就是说结果为8,而不是7

接下来来点难的看看:

def decorator(f):
    def wrapper(self,x,y):
        return self.name + x + y
    return wrapper
class C:
    name = '土'
    @decorator
    def method(x,y):
        return x + y
ins = C()
myname = ins.method('行','孙')

思考一下这个答案是什么? 

能想出来就基本上理解了什么是装饰器了!

相关推荐:《Python教程

Atas ialah kandungan terperinci python装饰器是什么. 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
Python vs C: Lengkung pembelajaran dan kemudahan penggunaanPython vs C: Lengkung pembelajaran dan kemudahan penggunaanApr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Python vs C: Pengurusan dan Kawalan MemoriPython vs C: Pengurusan dan Kawalan MemoriApr 19, 2025 am 12:17 AM

Python dan C mempunyai perbezaan yang signifikan dalam pengurusan dan kawalan memori. 1. Python menggunakan pengurusan memori automatik, berdasarkan pengiraan rujukan dan pengumpulan sampah, memudahkan kerja pengaturcara. 2.C memerlukan pengurusan memori manual, memberikan lebih banyak kawalan tetapi meningkatkan risiko kerumitan dan kesilapan. Bahasa mana yang harus dipilih harus berdasarkan keperluan projek dan timbunan teknologi pasukan.

Python untuk pengkomputeran saintifik: rupa terperinciPython untuk pengkomputeran saintifik: rupa terperinciApr 19, 2025 am 12:15 AM

Aplikasi Python dalam pengkomputeran saintifik termasuk analisis data, pembelajaran mesin, simulasi berangka dan visualisasi. 1.Numpy menyediakan susunan pelbagai dimensi yang cekap dan fungsi matematik. 2. Scipy memanjangkan fungsi numpy dan menyediakan pengoptimuman dan alat algebra linear. 3. Pandas digunakan untuk pemprosesan dan analisis data. 4.Matplotlib digunakan untuk menghasilkan pelbagai graf dan hasil visual.

Python dan C: Mencari alat yang betulPython dan C: Mencari alat yang betulApr 19, 2025 am 12:04 AM

Sama ada untuk memilih Python atau C bergantung kepada keperluan projek: 1) Python sesuai untuk pembangunan pesat, sains data, dan skrip kerana sintaks ringkas dan perpustakaan yang kaya; 2) C sesuai untuk senario yang memerlukan prestasi tinggi dan kawalan asas, seperti pengaturcaraan sistem dan pembangunan permainan, kerana kompilasi dan pengurusan memori manualnya.

Python untuk sains data dan pembelajaran mesinPython untuk sains data dan pembelajaran mesinApr 19, 2025 am 12:02 AM

Python digunakan secara meluas dalam sains data dan pembelajaran mesin, terutamanya bergantung pada kesederhanaannya dan ekosistem perpustakaan yang kuat. 1) PANDAS digunakan untuk pemprosesan dan analisis data, 2) Numpy menyediakan pengiraan berangka yang cekap, dan 3) SCIKIT-Learn digunakan untuk pembinaan dan pengoptimuman model pembelajaran mesin, perpustakaan ini menjadikan Python alat yang ideal untuk sains data dan pembelajaran mesin.

Pembelajaran Python: Adakah 2 jam kajian harian mencukupi?Pembelajaran Python: Adakah 2 jam kajian harian mencukupi?Apr 18, 2025 am 12:22 AM

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.

Python untuk Pembangunan Web: Aplikasi UtamaPython untuk Pembangunan Web: Aplikasi UtamaApr 18, 2025 am 12:20 AM

Aplikasi utama Python dalam pembangunan web termasuk penggunaan kerangka Django dan Flask, pembangunan API, analisis data dan visualisasi, pembelajaran mesin dan AI, dan pengoptimuman prestasi. 1. Rangka Kerja Django dan Flask: Django sesuai untuk perkembangan pesat aplikasi kompleks, dan Flask sesuai untuk projek kecil atau sangat disesuaikan. 2. Pembangunan API: Gunakan Flask atau DjangorestFramework untuk membina Restfulapi. 3. Analisis Data dan Visualisasi: Gunakan Python untuk memproses data dan memaparkannya melalui antara muka web. 4. Pembelajaran Mesin dan AI: Python digunakan untuk membina aplikasi web pintar. 5. Pengoptimuman Prestasi: Dioptimumkan melalui pengaturcaraan, caching dan kod tak segerak

Python vs C: Meneroka Prestasi dan KecekapanPython vs C: Meneroka Prestasi dan KecekapanApr 18, 2025 am 12:20 AM

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).