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

python之如何實現(xiàn)延遲操作

 更新時間:2023年04月28日 16:40:54   作者:胡小牧  
這篇文章主要介紹了python之如何實現(xiàn)延遲操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python實現(xiàn)延遲操作

python 想實現(xiàn)延遲的操作是需要應用time ,然后在使用time的sleep 方法

比如我想寫一個延遲1秒打印一次的操作

import time
for i in range(0, 10):
    time.sleep(1)
    print(i)

Python延遲加載問題

Python里面的延遲加載用得非常多,其主要思想是延遲所要引入類的實例化,節(jié)省一些初始化所需要的時間和空間。

這種思想在Django中應用得也是非常廣泛,比如ORM的QuerySet,還有鑒權中間件中的request.user等等,這些都是利用了延遲加載的思想。

本文就是通過例子來分析延遲加載的思想。

實現(xiàn)延遲加載的基本思路是我創(chuàng)建一個類,我們將我們需要實例化的類傳給他,這時該類都會變成一個延遲加載類,在應用的時候,雖然我實例化了這個延遲加載類,但是我們要引用的類就沒有實例化。

就像下面這樣: 

class User(object):
?? ?def __init__(self):
?? ??? ?self.name = 'haibo'
?? ??? ?self.age = 23
def test():
?? ?return User()
#初始化該延遲加載類
user = CommonLazyObject(lambda :test())
#此時我們要引用的類才執(zhí)行
user.age = 28

上面我定義了一個User類,它是我們在程序中要引用的類,CommonLazyObject是我們定義的延遲加載類(后面再說)。通過延遲加載類,我們不必要提前初始化它,只有我們想進行如下面的user.age的操作的時候,才會進行實例化。

好,下面看一下延遲加載類的具體實現(xiàn)過程。

思想:我們對于一個實例化的操作,無非最終會歸結為__getattr__,__setattr__等運算符,因此只要我們定義好這些運算符就可以實現(xiàn)這些延遲,即只有執(zhí)行這些操作的時候,才去真正實例化我們想要實例化的類:        

#建立一個空的對象
empty = object()
#一個裝飾器,對__getattr__進行裝飾,使得其可以進行類的實例化
def proxy_getattr(func):
?? ?def wrapper(self,*args):
?? ??? ?if self._wrapper is empty:
?? ??? ??? ?self._init_object()
?? ??? ?return func(self._wrapper,*args)
?? ?return wrapper
class LazyObject(object):
?? ?def __init__(self):
?? ??? ?self._wrapper = empty
?? ?__getattr__ = proxy_getattr(getattr)
? ? ? ? #進行賦值操作的時候,看是實例化類,還是對類的實例進行賦值操作。因為下面我們要進行實例化類的操作。
?? ?def __setattr__(self, key, value):
?? ??? ?if key == '_wrapper':
?? ??? ??? ?self.__dict__['_wrapper'] = value
?? ??? ?else:
?? ??? ??? ?if self._wrapper is empty:
?? ??? ??? ??? ?self._init_object()
?? ??? ??? ?setattr(self._wrapper,key,value)
? ? ? ? #在子類中,你應該重新定義它,你通過它,來實現(xiàn)你想要通過何種方式實例化你的類。
?? ?def _init_object(self):
?? ??? ?pass

先看上面的__setattr__,當我們執(zhí)行user.age=28的賦值操作的時候,就會調用該運算符,如果該延遲類中并沒有實例化我們要引入的類,就會先進行實例化,即調用self._init_object,并賦值給_wrapper。如果已經(jīng)實例化好了,就會直接進行這個實例的__setattr__。       

同理,__getattr_也是一個道理,我想print user.name ,首先要檢查引用的類是否已經(jīng)實例化,如果沒有實例化就先實例化,然后再調用該實例的__getattr__。

好,再看一個實現(xiàn)實例化的子類: 

class CommonLazyObject(LazyObject):
?? ?def __init__(self,func):
?? ??? ?self.__dict__['_wrapperfunc'] = func
?? ??? ?super(CommonLazyObject,self).__init__()
?? ?def _init_object(self):
?? ??? ?self._wrapper = self._wrapperfunc()

這個子類實例化的過程很簡單,就直接調用了。

OK!上面就介紹了延遲加載的思想以及創(chuàng)建過程。可能,我說的是最基本的實現(xiàn)方法,但也是Django中經(jīng)常用的。

總結

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

相關文章

  • Python中的jquery PyQuery庫使用小結

    Python中的jquery PyQuery庫使用小結

    這篇文章主要介紹了Python中的jquery PyQuery庫使用小結,需要的朋友可以參考下
    2014-05-05
  • Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能

    Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能

    這篇文章主要介紹了Python3實現(xiàn)發(fā)送郵件和發(fā)送短信驗證碼功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Python實現(xiàn)圖形用戶界面計算器

    Python實現(xiàn)圖形用戶界面計算器

    這篇文章主要為大家詳細介紹了Python實現(xiàn)圖形用戶界面計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Python和JS反爬之解決反爬參數(shù)?signKey

    Python和JS反爬之解決反爬參數(shù)?signKey

    這篇文章主要介紹了Python和JS反爬之解決反爬參數(shù)?signKey,Python?反爬中有一大類,叫做字體反爬,核心的理論就是通過字體文件或者?CSS?偏移,接下來文章的詳細介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python flask框架定時任務apscheduler應用介紹

    Python flask框架定時任務apscheduler應用介紹

    Flask是Python社區(qū)非常流行的一個Web開發(fā)框架,本文將嘗試將介紹APScheduler應用于Flask之中實現(xiàn)定時任務,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • 10個Python實現(xiàn)的最頻繁使用的聚類算法

    10個Python實現(xiàn)的最頻繁使用的聚類算法

    聚類或聚類分析是無監(jiān)督學習問題。它通常被用作數(shù)據(jù)分析技術,用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式。本文為大家介紹了10個最頻繁使用的聚類算法,感興趣的可以了解一下
    2022-12-12
  • 設計模式中的原型模式在Python程序中的應用示例

    設計模式中的原型模式在Python程序中的應用示例

    這篇文章主要介紹了設計模式中的原型模式在Python程序中的應用示例,文中主要強調了對淺拷貝和深拷貝在對象復制時的使用,需要的朋友可以參考下
    2016-03-03
  • python如何用pymodbus庫進行modbus tcp通信

    python如何用pymodbus庫進行modbus tcp通信

    這篇文章主要介紹了python如何用pymodbus庫進行modbus tcp通信問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • pycharm-professional-2020.1下載與激活的教程

    pycharm-professional-2020.1下載與激活的教程

    這篇文章主要介紹了pycharm-professional-2020.1下載與激活的教程,本文分為安裝和永久激活兩部分內(nèi)容,需要的朋友可以參考下
    2020-09-09
  • OPENAI?API?微調?GPT-3?的?Ada?模型

    OPENAI?API?微調?GPT-3?的?Ada?模型

    這篇文章主要為大家介紹了OPENAI?API?微調?GPT-3?的?Ada?模型使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論

瑞金市| 平定县| 河津市| 汉川市| 八宿县| 松江区| 永春县| 阳朔县| 铜鼓县| 松原市| 和硕县| 平武县| 祁阳县| 柘荣县| 房产| 民和| 张家界市| 礼泉县| 台江县| 武义县| 平阳县| 长乐市| 台南县| 绿春县| 伊春市| 托克逊县| 上蔡县| 家居| 龙南县| 福海县| 乾安县| 广汉市| 怀柔区| 富锦市| 成武县| 凤翔县| 晋城| 三明市| 遂平县| 南川市| 柏乡县|