Python装饰器原理与用法分析
这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下:
1、装饰器的本质是函数,主要用来装饰其他函数,也就是为其他函数添加附加功能
2、装饰器的原则:
(1) 装饰器不能修改被装饰的函数的源代码
(2) 装饰器不能修改被装饰的函数的调用方式
3、实现装饰器的知识储备
(1) Python中函数即‘变量'
a、变量在Python中的存储
x='Tomwenxing' y=x
[说明]:
当Python解释器遇到语句x='Tomwenxing'时,它主要完成了两样工作:
1.在内存中开辟了一片空间用来存储字符串‘Tomwenxing'
2.在内存从创建了一个名为x的变量,并用它指向字符串‘Tomwenxing'所占据的内存空间(可以理解为房间和房间号的关系)
而语句y=x意为将变量x对字符串的引用赋值给变量y,即在内存中创建一个变量y,并使其指向变量x所指向的内存空间
b、函数在Python中的存储
def test(): pass
[说明]:
在Python中,函数的存储和变量相似,以上面的函数为例,Python解释其主要做两件事:
1.在内存中开辟一个内存空间,用来存储函数代码的字符串(本例中代码只有一句:pass)
2.在内存中创建一个变量test,用来指向存储函数代码字符串的内存空间(相当于test=‘函数体')
因此说在Python中函数即变量
(2) 高阶函数(下面两个条件满足任何一个即为高阶函数)
a、把一个函数名当做实参传递给另外一个函数
[对装饰器的影响]:达到“在不修改被装饰函数源代码的情况下为其添加功能”的效果
import time def bar(): time.sleep(2) print('in the bar') def test(func): start_time=time.time() func() stop_time=time.time() print('函数的运行时间为:',stop_time-start_time) test(bar)
运行结果:
in the bar
函数的运行时间为: 2.0021145343780518
b、返回值中包含函数名
[对装饰器的影响]:达到“不改变函数的调用方式“的效果
import time def bar(): time.sleep(3) print('in the bar') def test2(func): print('新添加的功能') return func bar=test2(bar) bar()
运行结果:
新添加的功能
in the bar
(3) 嵌套函数:在一个函数体内用def去声明一个新的函数(不是调用)
def foo(): print('in the foo') def bar(): #声明一个新的函数,而不是调用函数 print('in the bar') bar() foo()
运行结果:
in the foo
in the bar
4、装饰器的语法:高阶函数+嵌套函数=》装饰器 (下面的例子可以用pycharm的调试器调试一下,看看代码的运行顺序)
import time def timer(func): def deco(*args,**kwargs):#使用了不定参数 start_time=time.time() res=func(*args,**kwargs) #运行函数 stop_time=time.time() print('运行时间:',stop_time-start_time) return res # 若无返回值,则返回None return deco @timer #等价于test1=timer(test1)=deco,即test1()=deco() def test1(): time.sleep(3) print('in the test1') @timer #等价于test2=timer(test2)=deco,即test2(name)=deco(name) def test2(name): time.sleep(3) print('in the test2',name) test1() print('-------------分界线------------------------') test2('Tomwenxing')
运行结果:
in the test1
运行时间: 3.0001718997955322
-------------分界线------------------------
in the test2 Tomwenxing
运行时间: 3.000171422958374
5、带参数的装饰器
# -*- coding:utf-8 -*- user,passwd='Tomwenxing','123' #如装饰器带参数,一般是三层嵌套 def auth(auth_type): #第一层的参数是装饰器的参数 def outer_wrapper(func):#第二层的参数是装饰器要装饰的目标函数 def wrapper(*args,**kwargs):#第三次的参数是目标函数的参数 if auth_type=='local': username = input('Username:').strip() password = input('Password:').strip() if user == username and passwd == password: print('用户Tomwenxing已经成功登录!') res = func(*args, **kwargs) #运行目标函数 return res else: exit('用户名或密码有错误') elif auth_type=='ldap': print('暂不支持这种登录方式!') return wrapper return outer_wrapper def index(): print('欢迎来到index页面') @auth(auth_type='local') #home=wrapper() def home(name): print('%s,欢迎来到home页面' %name) return 'This is home page' @auth(auth_type='ldap') def bbs(): print('欢迎来到bbs页面 ') index() print('----------------------分界线-------------------') print('函数的返回值为:',home('wenxing')) print('----------------------分界线-------------------') bbs()
运行结果:
欢迎来到index页面
----------------------分界线-------------------
Username:Tomwenxing
Password:123
用户Tomwenxing已经成功登录!
wenxing,欢迎来到home页面
函数的返回值为: This is home page
----------------------分界线-------------------
暂不支持这种登录方式!
相关推荐:
Atas ialah kandungan terperinci Python装饰器原理与用法分析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kunci kawalan bulu adalah memahami sifatnya secara beransur -ansur. PS sendiri tidak menyediakan pilihan untuk mengawal lengkung kecerunan secara langsung, tetapi anda boleh melaraskan radius dan kelembutan kecerunan dengan pelbagai bulu, topeng yang sepadan, dan pilihan halus untuk mencapai kesan peralihan semula jadi.

Artikel ini memperkenalkan operasi pangkalan data MySQL. Pertama, anda perlu memasang klien MySQL, seperti MySqlworkbench atau Command Line Client. 1. Gunakan perintah MySQL-Uroot-P untuk menyambung ke pelayan dan log masuk dengan kata laluan akaun root; 2. Gunakan CreateTatabase untuk membuat pangkalan data, dan gunakan Pilih pangkalan data; 3. Gunakan createtable untuk membuat jadual, menentukan medan dan jenis data; 4. Gunakan InsertInto untuk memasukkan data, data pertanyaan, kemas kini data dengan kemas kini, dan padam data dengan padam. Hanya dengan menguasai langkah -langkah ini, belajar menangani masalah biasa dan mengoptimumkan prestasi pangkalan data anda boleh menggunakan MySQL dengan cekap.

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.

PS Feathering adalah kesan kabur tepi imej, yang dicapai dengan purata piksel berwajaran di kawasan tepi. Menetapkan jejari bulu dapat mengawal tahap kabur, dan semakin besar nilai, semakin kaburnya. Pelarasan fleksibel radius dapat mengoptimumkan kesan mengikut imej dan keperluan. Sebagai contoh, menggunakan jejari yang lebih kecil untuk mengekalkan butiran apabila memproses foto watak, dan menggunakan radius yang lebih besar untuk mewujudkan perasaan kabur ketika memproses karya seni. Walau bagaimanapun, perlu diperhatikan bahawa terlalu besar jejari boleh dengan mudah kehilangan butiran kelebihan, dan terlalu kecil kesannya tidak akan jelas. Kesan bulu dipengaruhi oleh resolusi imej dan perlu diselaraskan mengikut pemahaman imej dan kesan genggaman.

PS Feathering boleh menyebabkan kehilangan butiran imej, ketepuan warna yang dikurangkan dan peningkatan bunyi. Untuk mengurangkan kesan, disarankan untuk menggunakan radius bulu yang lebih kecil, menyalin lapisan dan kemudian bulu, dan berhati -hati membandingkan kualiti imej sebelum dan selepas bulu. Di samping itu, bulu tidak sesuai untuk semua kes, dan kadang -kadang alat seperti topeng lebih sesuai untuk mengendalikan tepi imej.

Pengoptimuman prestasi MySQL perlu bermula dari tiga aspek: konfigurasi pemasangan, pengindeksan dan pengoptimuman pertanyaan, pemantauan dan penalaan. 1. Selepas pemasangan, anda perlu menyesuaikan fail my.cnf mengikut konfigurasi pelayan, seperti parameter innodb_buffer_pool_size, dan tutup query_cache_size; 2. Buat indeks yang sesuai untuk mengelakkan indeks yang berlebihan, dan mengoptimumkan pernyataan pertanyaan, seperti menggunakan perintah menjelaskan untuk menganalisis pelan pelaksanaan; 3. Gunakan alat pemantauan MySQL sendiri (ShowProcessList, ShowStatus) untuk memantau kesihatan pangkalan data, dan kerap membuat semula dan mengatur pangkalan data. Hanya dengan terus mengoptimumkan langkah -langkah ini, prestasi pangkalan data MySQL diperbaiki.

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Alasan dan penyelesaian yang sama untuk kegagalan pemasangan MySQL: 1. Nama pengguna atau kata laluan yang tidak betul, atau perkhidmatan MySQL tidak dimulakan, anda perlu menyemak nama pengguna dan kata laluan dan memulakan perkhidmatan; 2. Konflik pelabuhan, anda perlu menukar pelabuhan pendengaran MySQL atau menutup program yang menduduki port 3306; 3. Perpustakaan Ketergantungan hilang, anda perlu menggunakan Pengurus Pakej Sistem untuk memasang perpustakaan ketergantungan yang diperlukan; 4. Kebenaran yang tidak mencukupi, anda perlu menggunakan hak sudo atau pentadbir untuk menjalankan pemasang; 5. Fail konfigurasi yang salah, anda perlu menyemak fail konfigurasi My.cnf untuk memastikan konfigurasi adalah betul. Hanya dengan bekerja dengan mantap dan teliti boleh mysql dipasang dengan lancar.
