python之怎麼實現延遲操作
python實作延遲操作
python 想實作延遲的操作是需要套用time ,然後在使用time的sleep 方法
例如我想寫一個延遲1秒列印一次的動作
import time for i in range(0, 10): time.sleep(1) print(i)
Python延遲載入問題
Python裡面的延遲載入用得非常多,其主要想法是延遲所要引入類別的實例化,節省一些初始化所需的時間和空間。
這種想法在Django中應用得也是非常廣泛,例如ORM的QuerySet,還有鑑權中間件中的request.user等等,這些都是利用了延遲載入的想法。
本文就是透過例子來分析延遲載入的想法。
實現延遲加載的基本思路是我創建一個類,我們將我們需要實例化的類傳給他,這時該類都會變成一個延遲加載類,在應用的時候,雖然我實例化了這個延遲載入類,但是我們要引用的類別就沒有實例化。
就像下面這樣:
class User(object): def __init__(self): self.name = 'haibo' self.age = 23 def test(): return User() #初始化该延迟加载类 user = CommonLazyObject(lambda :test()) #此时我们要引用的类才执行 user.age = 28
上面我定義了一個User類,它是我們在程式中要引用的類,CommonLazyObject是我們定義的延遲載入類別(後面再說)。透過延遲載入類,我們不必要地提前初始化它,只有我們想進行如下面的user.age的操作的時候,才會進行實例化。
好,下面看一下延遲載入類別的具體實作過程。
思想:我們對於一個實例化的操作,無非最終會歸結為__getattr__,__setattr__等運算符,因此只要我們定義好這些運算符就可以實現這些延遲,即只有執行這些操作的時候,才去真正實例化我們想要實例化的類別:
#建立一个空的对象 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) #在子类中,你应该重新定义它,你通过它,来实现你想要通过何种方式实例化你的类。 def _init_object(self): pass
先看上面的__setattr__,當我們執行user.age=28的賦值操作的時候,就會呼叫該運算符,如果該延遲類別中並沒有實例化我們要引入的類,就會先進行實例化,即呼叫self._init_object,並賦值給_wrapper。如果已經實例化完成,那麼該實例的__setattr__方法就會立即執行。
同理,__getattr_也是一個道理,我想print user.name ,首先要檢查引用的類別是否已經實例化,如果沒有實例化就先實例化,然後再呼叫該實例的__getattr__ 。
好,再看一個實作實例化的子類別:
class CommonLazyObject(LazyObject): def __init__(self,func): self.__dict__['_wrapperfunc'] = func super(CommonLazyObject,self).__init__() def _init_object(self): self._wrapper = self._wrapperfunc()
這個子類別實例化的過程很簡單,就直接呼叫了。
以上是python之怎麼實現延遲操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。
