欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 裝飾器的使用示例

 更新時(shí)間:2020年10月10日 11:34:55   作者:南方的墻  
這篇文章主要介紹了python 裝飾器的使用示例,幫助大家更好的理解和使用python裝飾器,感興趣的朋友可以了解下

無(wú)參修飾 ,無(wú)參數(shù)時(shí)不需要調(diào)用

def log1(func):
  func()
@log1
def test():
  print('test:')

有參修飾

def log2(func):
  def inner(*args, **kwargs):
    func(*args, **kwargs)
  return inner
@log2
def test(num):
  print('testlog2:',num,test.__name__)
test(20) #相當(dāng)于log(test(20))

@wraps可以保證裝飾器修飾的函數(shù)的name的值保持不變

不帶參數(shù)的裝飾器

def log3(func):
  @wraps(func)
  def inner(*args, **kwargs,):
    func(*args, **kwargs)
  return inner
@log3
def test(num):
  print('testlog3:',num,test.__name__)
test(30) #相當(dāng)于log(test(30))

帶參數(shù)的裝飾器

def log4(level):
  def log(func):
    @wraps(func)
    def inner(*args, **kwargs,):
      if level == "warn":
        print("%s is running" % func.__name__)
      func(*args, **kwargs)
    return inner
  return log
@log4(level="warn")
def test(num):
  print('testlog4:', num, test.__name__)
test(40)

實(shí)現(xiàn)帶參數(shù)和不帶參數(shù)的裝飾器自適應(yīng)

def log(arg):
  if callable(arg): # 判斷參入的參數(shù)是否是函數(shù),不帶參數(shù)的裝飾器調(diào)用這個(gè)分支
    def log3(func):
      @wraps(func)
      def inner(*args, **kwargs, ):
        func(*args, **kwargs)
      return inner
    return log3
  else:
    def log4(func):
      @wraps(func)
      def inner(*args, **kwargs,):
        if arg == "warn":
          print("%s is running" % func.__name__)
        func(*args, **kwargs)
      return inner
    return log4
@log(arg=None)
def test(num):
  print('testlog:', num, test.__name__)
test(0)

返回入?yún)⒊鰠?/strong>

def log5(func):
  def inner(*args, **kwargs):
    print('入?yún)ⅲ?,func.__name__, args, kwargs)
    res =func(*args, **kwargs)
    print('出參:',func.__name__, res)
    return res
  return inner
@log5
def test(num):
  print('testlog5:', num, test.__name__)
  return num
print(test(50))

類(lèi)裝飾器

class Loging:
  def __init__(self,level):
    self.level = level

  def __call__(self,func):
    @wraps(func)
    def inner(*args, **kwargs):
      if self.level == "warn":
        self.notify(func)
      func(*args, **kwargs)
    return inner

  def notify(self,func):
    print ("%s is running" % func.__name__)


@Loging(level="warn")
def test(num):
  print('testLoging:', num, test.__name__)
test(0)

以上就是python 裝飾器的使用示例的詳細(xì)內(nèi)容,更多關(guān)于python 裝飾器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python transpose()處理高維度數(shù)組的軸變換的實(shí)現(xiàn)

    python transpose()處理高維度數(shù)組的軸變換的實(shí)現(xiàn)

    本文主要介紹了python transpose()處理高維度數(shù)組的軸變換的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Python中的pass語(yǔ)句使用方法講解

    Python中的pass語(yǔ)句使用方法講解

    這篇文章主要介紹了Python中的pass語(yǔ)句使用方法講解,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python中使用(.)進(jìn)行相對(duì)路徑訪問(wèn)文件的操作方法

    python中使用(.)進(jìn)行相對(duì)路徑訪問(wèn)文件的操作方法

    在Python中,使用相對(duì)路徑訪問(wèn)文件是一種常見(jiàn)的做法,尤其是在處理與腳本位于同一目錄或附近目錄的文件時(shí),這篇文章主要介紹了python中使用(.)來(lái)進(jìn)行相對(duì)路徑訪問(wèn)文件,需要的朋友可以參考下
    2024-05-05
  • python基礎(chǔ)知識(shí)之索引與切片詳解

    python基礎(chǔ)知識(shí)之索引與切片詳解

    在python的學(xué)習(xí)過(guò)程,有些同學(xué)對(duì)索引和切換會(huì)感到困惑,今天我們就來(lái)弄清楚它,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)知識(shí)之索引與切片的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python-嵌套列表list的全面解析

    Python-嵌套列表list的全面解析

    下面小編就為大家?guī)?lái)一篇Python-嵌套列表list的全面解析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 使用python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)檢測(cè)

    使用python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)檢測(cè)

    Redis未授權(quán)訪問(wèn)漏洞是一種安全漏洞,可能導(dǎo)致未經(jīng)授權(quán)的用戶(hù)或攻擊者訪問(wèn)Redis數(shù)據(jù)庫(kù),甚至修改或刪除其中的數(shù)據(jù),這種漏洞通常發(fā)生在管理員未正確配置Redis實(shí)例的訪問(wèn)控制和認(rèn)證機(jī)制時(shí),本文介紹了python腳本實(shí)現(xiàn)Redis未授權(quán)訪問(wèn)漏洞利用,需要的朋友可以參考下
    2024-10-10
  • Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】

    Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】

    這篇文章主要介紹了Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Python使用socket套接字實(shí)現(xiàn)基于UDP協(xié)議的數(shù)據(jù)發(fā)送端與接收端相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python Pytest裝飾器@pytest.mark.parametrize詳解

    Python Pytest裝飾器@pytest.mark.parametrize詳解

    本文主要介紹了Python Pytest裝飾器@pytest.mark.parametrize詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python英語(yǔ)單詞測(cè)試小程序代碼實(shí)例

    python英語(yǔ)單詞測(cè)試小程序代碼實(shí)例

    這篇文章主要介紹了python英語(yǔ)單詞測(cè)試小程序代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟

    Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟

    Virtualenv是一個(gè)Python環(huán)境管理工具,它允許開(kāi)發(fā)者在不同的項(xiàng)目之間獨(dú)立創(chuàng)建和管理各自的Python環(huán)境,通過(guò)virtualenv,你可以為每個(gè)項(xiàng)目安裝特定版本的Python解釋器以及項(xiàng)目的依賴(lài)庫(kù),本文給大家介紹了Python使用Virtualenv進(jìn)行虛擬環(huán)境管理的詳細(xì)步驟
    2024-09-09

最新評(píng)論