最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python裝飾器知識點(diǎn)補(bǔ)充

 更新時間:2018年05月28日 08:45:56   作者:mugbya  
本篇文章給大家補(bǔ)充了關(guān)于Python裝飾器的相關(guān)知識點(diǎn)內(nèi)容,大家可以跟著學(xué)習(xí)參考下。

首先回顧一下關(guān)于Python裝飾器以及裝飾器模式

補(bǔ)全

根據(jù)Java實(shí)現(xiàn)裝飾器模式的,我們可以寫下面一段代碼:

import logging


def use_logging(func):
 logging.warn("%s is running" % func.__name__)
 return func

def foo():
 print('i am foo')

foo = use_logging(foo)

foo() # 調(diào)用

這個實(shí)現(xiàn)對于上篇文章中提到的Java使用裝飾器。上面也是一個裝飾器,實(shí)現(xiàn)最簡單的一個增加函數(shù)日志的功能,但是如果這個額外功能是要去檢測傳入的參數(shù)時,這時上面的就不行了。這時12步輕松搞定python裝飾器中的例子還是精妙的。

# 裝飾器
def wrapper(func):
 def checker(a, b): # 1
  if a.x < 0 or a.y < 0:
   a = Coordinate(a.x if a.x > 0 else 0, a.y if a.y > 0 else 0)
  if b.x < 0 or b.y < 0:
   b = Coordinate(b.x if b.x > 0 else 0, b.y if b.y > 0 else 0)
  ret = func(a, b)
  if ret.x < 0 or ret.y < 0:
   ret = Coordinate(ret.x if ret.x > 0 else 0, ret.y if ret.y > 0 else 0)
  return ret
 return checker


# 原函數(shù)
def add(a, b):
 return Coordinate(a.x + b.x, a.y + b.y)

# 使用裝飾 
add = wrapper(add) 

細(xì)心你會發(fā)現(xiàn),裝飾器函數(shù)的參數(shù)就是傳入的原函數(shù),而內(nèi)部函數(shù)的參數(shù)跟原函數(shù)一模一樣,最外層返回的是內(nèi)部函數(shù)的引用,內(nèi)部函數(shù)返回的是傳入?yún)?shù)的引用調(diào)用的結(jié)果

這里用到了函數(shù)作為參數(shù)特性,當(dāng)然還有些閉包的知識,具體請看 上面提到的博客鏈接,真的講的不錯。

而上篇說到的Python裝飾 特性就是這個神奇的語法糖了,可以這樣使用

# 原函數(shù)
@wrapper
def add(a, b):
 return Coordinate(a.x + b.x, a.y + b.y)

帶參數(shù)的裝飾器

如果要實(shí)現(xiàn)一個帶參數(shù)的裝飾器,那要怎么寫呢

def time_diff(s):
 def decorator(func):
  def wrapper(*args, **kwargs):
   start_time = time.time()
   res = func(*args, **kwargs)
   end_time = time.time()
   print("[%s]執(zhí)行程序所用時間: %s" % (s, end_time - start_time))
   return res
  return wrapper
 return decorator
 
@time_diff("polynomial_1")
def polynomial_1(n, x):
 res = 0
 for i in range(n):
  res += i*pow(x, i)
 return res

調(diào)用并執(zhí)行輸出結(jié)果:

print(polynomial_1(1, 5))

[duoxiangshi_1]執(zhí)行程序所用時間: 4.76837158203125e-06
0

帶參數(shù)的裝飾器需要在不帶參數(shù)裝飾器外再定義一層函數(shù),最外層函數(shù)的返回值是第二層函數(shù)的引用。

總結(jié):多些多練,用于實(shí)際中,才能更加熟練。最近學(xué)數(shù)據(jù)結(jié)構(gòu)與算法,寫些裝飾器用來看程序執(zhí)行時間,真是再方便不過了!

相關(guān)文章

  • Python數(shù)據(jù)可視化:泊松分布詳解

    Python數(shù)據(jù)可視化:泊松分布詳解

    今天小編就為大家分享一篇Python數(shù)據(jù)可視化:泊松分布詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python操作Redis數(shù)據(jù)庫的詳細(xì)教程與應(yīng)用實(shí)戰(zhàn)

    Python操作Redis數(shù)據(jù)庫的詳細(xì)教程與應(yīng)用實(shí)戰(zhàn)

    Redis是一個高性能的鍵值存儲數(shù)據(jù)庫,支持多種類型的數(shù)據(jù)結(jié)構(gòu),如字符串、哈希表、列表、集合和有序集合等,在Python中,通過redis-py庫可以方便地操作Redis數(shù)據(jù)庫,本文將詳細(xì)介紹如何在Python代碼中操作Redis,需要的朋友可以參考下
    2024-08-08
  • python實(shí)現(xiàn)AES和RSA加解密的方法

    python實(shí)現(xiàn)AES和RSA加解密的方法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES和RSA加解密的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python pygame實(shí)現(xiàn)圖像基本變換的示例詳解

    Python pygame實(shí)現(xiàn)圖像基本變換的示例詳解

    pygame的transform中封裝了一些基礎(chǔ)的圖像處理函數(shù),這篇文章主要為大家介紹了pygame實(shí)現(xiàn)圖像的基本變換,例如縮放、旋轉(zhuǎn)、鏡像等,感興趣的小伙伴可以了解一下
    2023-11-11
  • pandas中DataFrame重置索引的幾種方法

    pandas中DataFrame重置索引的幾種方法

    在pandas中,經(jīng)常對數(shù)據(jù)進(jìn)行處理 而導(dǎo)致數(shù)據(jù)索引順序混亂,從而影響數(shù)據(jù)讀取、插入等,所以小編總結(jié)了幾種索引重置的方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件

    詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)刪除重復(fù)文件功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-10-10
  • python3+PyQt5實(shí)現(xiàn)文檔打印功能

    python3+PyQt5實(shí)現(xiàn)文檔打印功能

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)文檔打印功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • git進(jìn)行版本控制心得詳談

    git進(jìn)行版本控制心得詳談

    這篇文章主要介紹了git進(jìn)行版本控制的心得和經(jīng)驗(yàn),給并大家總結(jié)了作者的技巧,需要的朋友們參考一下吧。
    2017-12-12
  • 解決pycharm上的jupyter notebook端口被占用問題

    解決pycharm上的jupyter notebook端口被占用問題

    今天小編就為大家分享一篇解決pycharm上的jupyter notebook端口被占用問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Ubuntu下Python2與Python3的共存問題

    Ubuntu下Python2與Python3的共存問題

    Linux系統(tǒng)一般自帶Python,有時候又自己下載了Python,因此有可能Python2和Python3同時存在。那么當(dāng)我們在Terminal鍵入python的時候,會調(diào)出哪個Python呢?本文即解決這個問題
    2018-10-10

最新評論

高青县| 醴陵市| 六盘水市| 望奎县| 金沙县| 收藏| 忻州市| 滦南县| 塔河县| 会同县| 娄烦县| 桂平市| 怀仁县| 荔浦县| 湖口县| 邹城市| 纳雍县| 富平县| 荃湾区| 宜昌市| 科尔| 博乐市| 乳源| 云和县| 翁源县| 宁明县| 涪陵区| 吉隆县| 安西县| 奇台县| 蒙山县| 乌海市| 潜山县| 乐亭县| 恩平市| 扬中市| 松阳县| 太白县| 正宁县| 桂平市| 泊头市|