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

Python實(shí)現(xiàn)屬性可修改的裝飾器方式

 更新時間:2024年02月09日 10:02:00   作者:AllardZhao  
這篇文章主要介紹了Python實(shí)現(xiàn)屬性可修改的裝飾器方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

如何實(shí)現(xiàn)屬性可修改的函數(shù)裝飾器

實(shí)際案例

為分析程序內(nèi)哪些函數(shù)執(zhí)行時間開銷比較大,

我們定義一個帶timeout參數(shù)的函數(shù)裝飾器,timeout是一個時間閥值

比如運(yùn)行時間超過1秒的都是比較慢的,這種函數(shù)比較可疑。

裝飾器功能如下:

  • 統(tǒng)計(jì)被裝飾函數(shù)單詞調(diào)用運(yùn)行時間;
  • 時間大于參數(shù)timeout的,將此次函數(shù)調(diào)用記錄到log日志中;
  • 運(yùn)行時可修改timeout的值(可以動態(tài)修改timeout)。

解決方案

為包裹函數(shù)增加一個函數(shù)作為包裹函數(shù)的屬性,用來修改閉包中使用的自由變量。

在python3中:使用nonlocal訪問嵌套作用域中的變量引用。

代碼演示

# _*_ encoding:utf-8 _*_
from functools import wraps
from random import randint
import time
import logging
 
 
# 內(nèi)部統(tǒng)計(jì)一個算法的運(yùn)行時間
def warn(timeout):
    """ 帶參數(shù)裝飾器也就是內(nèi)部能返回一個裝飾器 """
    # python2中因?yàn)闆]有nonlocal,可以將timeout聲明為可變對象
    # timeout = [timeout]
 
    # 裝飾器冬季func運(yùn)行時間
    def decorator(func):
        # 定義包裹函數(shù)
        def wrapper(*args, **kwargs):
            start = time.time()
            res = func(*args, **kwargs)
            # 得到運(yùn)行時間
            used = time.time() - start
            if used > timeout:
                msg = '"%s": %s > %s' % (func.__name__, used, timeout)
                # 如果超時輸入到日志當(dāng)中
                logging.warning(msg)
            # if used > timeout[0]:
            #     msg = '"%s": %s > %s' % (func.__name__, used, timeout[0])
            #     logging.warn(msg)
            # return res
 
        #  動態(tài)修改函數(shù)屬性timeout值
        def set_timeout(k):
            # python3聲明嵌套作用域下變量,類似于global
            nonlocal timeout
            timeout = k
            # python2中使用可變對象修改timeout
            # timeout[0] = k
 
        # 將set_timeout函數(shù)作為wrapper屬性,未來用戶就可以通過函數(shù)來調(diào)用到它。
        wrapper.set_timeout = set_timeout
        return wrapper
 
    return decorator
 
 
# 測試代碼
@warn(1.5)
def test():
    print('In test')
    # 隨機(jī)進(jìn)入睡眠狀態(tài),百分之50概率
    while randint(0, 1):
        time.sleep(0.5)
 
 
for _ in range(30):
    test()
 
# 測試運(yùn)行時修改timeout屬性等于1
test.set_timeout(1)
for _ in range(30):
    test()
 
'''
運(yùn)行完前30個test函數(shù)后修改timeout=1。
運(yùn)行時可以看到timeout從1.5變成了1,如下:
WARNING:root:"test": 1.509084939956665 > 1.5
WARNING:root:"test": 1.004662036895752 > 1
'''

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用表格幫你了解Python數(shù)據(jù)類型

    用表格幫你了解Python數(shù)據(jù)類型

    這篇文章主要為大家介紹了Python數(shù)據(jù)類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-01-01
  • 查找python項(xiàng)目依賴并生成requirements.txt的方法

    查找python項(xiàng)目依賴并生成requirements.txt的方法

    今天小編就為大家分享一篇查找python項(xiàng)目依賴并生成requirements.txt的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 如何建立一個超圖詳解

    如何建立一個超圖詳解

    這篇文章主要介紹了如何建立一個超圖,如果你想學(xué)習(xí)圖像處理,這盤文章可能對你有一點(diǎn)幫助,需要的朋友可以參考下
    2021-04-04
  • Python random庫使用方法及異常處理方案

    Python random庫使用方法及異常處理方案

    這篇文章主要介紹了python random庫使用方法及異常處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python使用DrissionPage實(shí)現(xiàn)數(shù)據(jù)分析工具

    Python使用DrissionPage實(shí)現(xiàn)數(shù)據(jù)分析工具

    在短視頻時代,抖音數(shù)據(jù)蘊(yùn)含著巨大價值,本文我們將使用新興的DrissionPage替代Selenium,結(jié)合精心設(shè)計(jì)的UI框架,打造了一款顏值與實(shí)力并存的分析利器,感興趣的小伙伴可以了解下
    2025-05-05
  • 淺談keras中的batch_dot,dot方法和TensorFlow的matmul

    淺談keras中的batch_dot,dot方法和TensorFlow的matmul

    這篇文章主要介紹了淺談keras中的batch_dot,dot方法和TensorFlow的matmul,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 利用Tkinter和matplotlib兩種方式畫餅狀圖的實(shí)例

    利用Tkinter和matplotlib兩種方式畫餅狀圖的實(shí)例

    下面小編就為大家?guī)硪黄肨kinter和matplotlib兩種方式畫餅狀圖的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望對大家有所幫助
    2017-11-11
  • python迭代器實(shí)例簡析

    python迭代器實(shí)例簡析

    這篇文章主要介紹了python迭代器,以一個簡單實(shí)例的形式分析了Python中迭代器的用法及注意事項(xiàng),需要的朋友可以參考下
    2014-09-09
  • Python OpenCV處理圖像之圖像像素點(diǎn)操作

    Python OpenCV處理圖像之圖像像素點(diǎn)操作

    這篇文章主要為大家詳細(xì)介紹了Python OpenCV處理圖像之圖像像素點(diǎn)操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用Python和PySpark進(jìn)行數(shù)據(jù)分析的實(shí)戰(zhàn)教程

    使用Python和PySpark進(jìn)行數(shù)據(jù)分析的實(shí)戰(zhàn)教程

    數(shù)據(jù)分析是當(dāng)今信息時代中至關(guān)重要的技能之一,Python和PySpark作為強(qiáng)大的工具,提供了豐富的庫和功能,使得數(shù)據(jù)分析變得更加高效和靈活,在這篇文章中,我們將深入探討如何使用Python和PySpark進(jìn)行數(shù)據(jù)分析,需要的朋友可以參考下
    2024-01-01

最新評論

龙川县| 祁东县| 黎平县| 宜昌市| 普格县| 金寨县| 莱阳市| 通海县| 通州区| 张家港市| 张家口市| 增城市| 三亚市| 佛山市| 夏津县| 合江县| 贵州省| 拉萨市| 时尚| 阜新市| 廉江市| 新源县| 长子县| 庄浪县| 杭锦旗| 阿瓦提县| 固镇县| 临高县| 百色市| 河南省| 莱阳市| 普兰县| 长丰县| 古丈县| 乾安县| 呼和浩特市| 三都| 济南市| 丽江市| 淳化县| 怀安县|