日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python储备知识与装饰器

發(fā)布時(shí)間:2025/3/20 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python储备知识与装饰器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

儲(chǔ)備知識(shí):

1、 *args, **kwargs

def index(x,y):print(x,y)def wrapper(*args,**kwargs):index(*args,**kwargs) #wrapper(222,111)

2、名稱(chēng)空間與作用域:名稱(chēng)空間的的"嵌套"關(guān)系是在函數(shù)定義階段,即會(huì)檢測(cè)語(yǔ)法的錯(cuò)誤

def func():print(x)x = 111func()

3、函數(shù)對(duì)象:

  • 可以把函數(shù)當(dāng)做參數(shù)傳入
  • 可以把函數(shù)當(dāng)做返回值返回
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def func():print(x) x = 111def index():return 123def foo(func):return funcfoo(index)

4、函數(shù)的嵌套定義:

def outter(func):def wrapper():passreturn wrapper 

閉包函數(shù)

def outter():x = 0def wrapper():nonlocal xx += 1return xreturn wrapperwrapper = outter() print(wrapper())

傳參的方式一:通過(guò)參數(shù)的形式為函數(shù)體傳值

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def wrapper(x):print(1)print(2)print(3)xwrapper(1) wrapper(2) wrapper(3

傳參的方式二:通過(guò)閉包的方式為函數(shù)體傳值

def outter(x):def wrapper():print(1)print(2)print(3)xreturn wrapperwrapper=outter(1) print(wrapper())

裝飾器:裝飾器指的定義一個(gè)函數(shù),該函數(shù)是用來(lái)為其他函數(shù)添加額外的功能

開(kāi)放封閉原則

  • 開(kāi)放:指的是對(duì)拓展功能是開(kāi)放的
  • 封閉:指的是對(duì)修改源代碼是封閉的
# 需求:在不修改index函數(shù)的源代碼以及調(diào)用方式的前提下為其添加統(tǒng)計(jì)運(yùn)行時(shí)間的功能 def index(x,y):time.sleep(3)print('index %s %s' %(x,y))index(111,222)

解決方案一:失敗

問(wèn)題:沒(méi)有修改被裝飾對(duì)象的調(diào)用方式,但是修改了其源代碼

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' import timedef index(x,y):start=time.time()time.sleep(3)print('index %s %s' %(x,y))stop = time.time()print(stop - start)index(111,222)

解決方案二:失敗
問(wèn)題:沒(méi)有修改被裝飾對(duì)象的調(diào)用方式,也沒(méi)有修改了其源代碼,并且加上了新功能
但是代碼冗余

import timedef index(x,y):time.sleep(3)print('index %s %s' %(x,y))start=time.time() index(111,222) stop=time.time() print(stop - start)start=time.time() index(111,222) stop=time.time() print(stop - start)

解決方案三:失敗

問(wèn)題:解決了方案二代碼冗余問(wèn)題,但帶來(lái)一個(gè)新問(wèn)題即函數(shù)的調(diào)用方式改變了

import timedef index(x,y):time.sleep(3)print('index %s %s' %(x,y))def wrapper():start=time.time()index(111,222)stop=time.time()print(stop - start)wrapper()

方案三的優(yōu)化一:將index的參數(shù)寫(xiě)活了

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' import timedef index(x,y,z):time.sleep(3)print('index %s %s %s' %(x,y,z))def wrapper(*args,**kwargs):start=time.time()index(*args,**kwargs) stop=time.time()print(stop - start)wrapper(3333,4444,5555)

方案三的優(yōu)化二:在優(yōu)化一的基礎(chǔ)上把被裝飾對(duì)象寫(xiě)活了,原來(lái)只能裝飾index

import timedef index(x,y,z):time.sleep(3)print('index %s %s %s' %(x,y,z))def home(name):time.sleep(2)print('welcome %s to home page' %name)def outter(func):def wrapper(*args,**kwargs):start=time.time()func(*args,**kwargs) stop=time.time()print(stop - start)return wrapperindex=outter(index) home=outter(home)

方案三的優(yōu)化三:將wrapper做的跟被裝飾對(duì)象一模一樣,以假亂真

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' import timedef index(x,y,z):time.sleep(3)print('index %s %s %s' %(x,y,z))def home(name):time.sleep(2)print('welcome %s to home page' %name)def outter(func):def wrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print(stop - start)return resreturn wrapperhome=outter(home)

語(yǔ)法糖:在被裝飾對(duì)象正上方的單獨(dú)一行寫(xiě)@裝飾器名字

import time # 裝飾器 def timmer(func):def wrapper(*args,**kwargs):start=time.time()res=func(*args,**kwargs)stop=time.time()print(stop - start)return resreturn wrapper@timmer def index(x,y,z):time.sleep(3)print('index %s %s %s' %(x,y,z))@timmer def home(name):time.sleep(2)print('welcome %s to home page' %name)index(x=1,y=2,z=3) home('egon')

總結(jié)無(wú)參裝飾器模板

def outter(func):def wrapper(*args,**kwargs):# 1、調(diào)用原函數(shù)# 2、為其增加新功能res=func(*args,**kwargs)return resreturn wrapper

總結(jié)

以上是生活随笔為你收集整理的Python储备知识与装饰器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。