人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Python 裝飾器代碼解析

發(fā)布日期:2021-12-15 02:58 | 文章來(lái)源:源碼之家

以往看到我博客的小伙伴可能都知道,我的一般都是吐槽和講廢話環(huán)節(jié),哈哈哈哈。今天難得休息,最近可真是太忙了,博主已經(jīng)連續(xù)一年都在996了,所以最近沒(méi)怎么學(xué)習(xí)新東西,只能回顧以往的舊知識(shí)了,上周一起工作的小伙伴扛不住996離職了,我們?nèi)说男F(tuán)隊(duì)也正式解散了,哎。原本想著找時(shí)間好好整理一個(gè)關(guān)于關(guān)于接口自動(dòng)化測(cè)試或ceph相關(guān)的東西。但由于篇幅過(guò)長(zhǎng)這里目前可能不會(huì)著手寫(xiě)這方面東西。其實(shí)啊寫(xiě)是很簡(jiǎn)單的,主要例子難找。哈哈哈哈。
好了回歸正題吧??催^(guò)我以往博客的小伙伴肯定見(jiàn)我用過(guò)@parameterized.expand()用作參數(shù)化的裝飾器。這屬于系統(tǒng)定義裝飾器,當(dāng)然我們自己也可以自定義裝飾器已適合我們?nèi)粘5拈_(kāi)發(fā)需求。
**什么是裝飾器:**裝飾器的本質(zhì)就是一個(gè)函數(shù),作用是在不改變?cè)创a的情況下,給函數(shù)增加額外的功能;裝飾器的使用通過(guò)@語(yǔ)法糖進(jìn)行調(diào)用。

普通裝飾器:

直接上代碼吧。

def demo(func_test):
 def wrapper():
  print('定義的第一個(gè)裝飾器')
  func_test()
  print('裝飾器結(jié)束')
 return wrapper #這里注意不要加括號(hào)

@demo
def func_test():
 print('小白小白?。。?!')

直接使用自定義裝飾器強(qiáng)化的原方法。
帶有參數(shù)的裝飾器:

def demo(func_test):
 def wrapper(name):
  print('定義的第一個(gè)裝飾器')
  func_test(name)
  print('哦,你就是%s啊'%name)
  print('裝飾器結(jié)束')
 return wrapper

@demo
def func_test(name):
 print('大家好我叫%s'%name)

是不是有點(diǎn)感覺(jué)了啊。
接下來(lái)就是不帶自定義參數(shù)的裝飾器

def demo(func_test):
 def wrapper(*name,**kwargs):
  print('定義的第一個(gè)裝飾器')
  func_test(*name,**kwargs)
  print('哦,你就是%s啊'%name[0])
  print('你今年%s歲啊'%name[1])
  print('裝飾器結(jié)束')
 return wrapper

@demo
def func_test(name,age):
 print('大家好我叫%s'%name)
 print('今年{}'.format(age))

是不是很簡(jiǎn)答啊。哈哈哈哈
多個(gè)裝飾一起使用。

def deco01(func):
 def wrapper(*args,**kwargs):
  print('第一層的裝飾器')
  func(*args,**kwargs)
  print('第一層裝飾器結(jié)束')
 return wrapper

def deco02(func):
 def wrapper(*args,**kwargs):
  print('這是第二層裝飾器')
  print('第二層裝飾器結(jié)束')
  func(*args, **kwargs)
 return wrapper

@deco02
@deco01
def func(a,b,c,name):
 print('hello ,here is a func')
 print("result is %d" %(a+b+c))
 print('name:{}'.format(name))

看看執(zhí)行順序可以看出裝飾器是從上往下執(zhí)行的。
類(lèi)裝飾器:
在使用裝飾器時(shí)我們總不能在一個(gè)文件里寫(xiě)的都是裝飾器和各個(gè)方法吧,總是要分開(kāi)的。這里就要是講一個(gè)類(lèi)裝飾器。
這里呢,我大概了寫(xiě)了一個(gè)讀取文件裝飾器的例子。

class Mydecorator():
 def __init__(self,func):
 # 定義為私有屬性
  self.func = func
 # 實(shí)現(xiàn)__call__方法,讓對(duì)象變成可以調(diào)用的對(duì)象,可調(diào)用的對(duì)象可以想函數(shù)那樣使用
 def __call__(self, *args, **kwargs):
  print('測(cè)試類(lèi)裝飾器')
  self.func(*args)
  catalogue = args[0]
  suffix = catalogue.split('.')[2]
  try:
if suffix == 'json':
 with open(*args,'r',encoding='utf-8') as file_object:
  contents = json.load(file_object)
  print(contents)
else:
 with open(*args,'r',encoding='utf-8') as file_object:
  contents = file_object.read()
  print(contents)
  except Exception as a:
print('讀取文件出錯(cuò)拉:{}'.format(a))
@Mydecorator
def name(name):
 print('請(qǐng)輸入對(duì)應(yīng)文件路徑:%s'%name)

是不是很好用啊。哈哈哈哈

到此這篇關(guān)于Python 裝飾器代碼解析的文章就介紹到這了,更多相關(guān)Python 裝飾器內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部