91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么使用裝飾器裝飾函數

發布時間:2021-07-20 13:43:56 來源:億速云 閱讀:174 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Python中怎么使用裝飾器裝飾函數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

***個函數deco是裝飾函數,它的參數就是被裝飾的函數對象。我們可以在deco函數內對傳入的函數對象做一番“裝飾”,然后返回這個對象(記住一定要返回 ,不然外面調用foo的地方將會無函數可用。

我寫了個小例子,檢查函數有沒有說明文檔:、

static PyObject* thread_PyThread_start_new_thread(PyObject *self, PyObject     *fargs)   {       PyObject *func, *args, *keyw = NULL;       struct bootstate *boot;       long ident;       PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3, &func, &args, &keyw);       //[1]:創建bootstate結構       boot = PyMem_NEW(struct bootstate, 1);       boot->interp = PyThreadState_GET()->interp;       boot->funcfunc = func;       boot->argsargs = args;       boot->keywkeyw = keyw;       //[2]:初始化多線程環境       PyEval_InitThreads(); /* Start the interpreter's thread-awareness */       //[3]:創建線程       ident = PyThread_start_new_thread(t_bootstrap, (void*) boot);       return PyInt_FromLong(ident);   [thread.c]   /* Support for runtime thread stack size tuning.      A value of 0 means using the platform's default stack size      or the size specified by the THREAD_STACK_SIZE macro. */   static size_t _pythread_stacksize = 0;   [thread_nt.h]   long PyThread_start_new_thread(void (*func)(void *), void *arg)   {

Python裝飾器是裝飾函數,它的參數是用來加強“加強裝飾”的。由于此函數并非被裝飾的函數對象,所以在內部必須至少創建一個接受被裝飾函數的函數,然后返回這個對象(實際上此時foo=decomaker(arg)(foo))。

這個我還真想不出什么好例子,還是見識少啊,只好借用同步鎖的例子了:

def synchronized(lock):         """鎖同步裝飾方法        !lock必須實現了acquire和release方法        """        def sync_with_lock(func):             def new_func(*args, **kwargs):                 lock.acquire()                 try:                     return func(*args, **kwargs)                 finally:                     lock.release()             new_func.func_name = func.func_name             new_func.__doc__ = func.__doc__             return new_func         return sync_with_lock    @synchronized(__locker)     def update(data):     """更新計劃任務"""        tasks = self.get_tasks()         delete_task = None        for task in tasks:             if task[PLANTASK.ID] == data[PLANTASK.ID]:                 tasks.insert(tasks.index(task), data)                 tasks.remove(task)                 delete_task = task         r, msg = self._refresh(tasks, delete_task)         return r, msg, data[PLANTASK.ID]

調用時還是updae(data),同時還可以將多個裝飾器組合 使用:

def synchronized(lock):         """鎖同步裝飾方法        !lock必須實現了acquire和release方法        """        def sync_with_lock(func):             def new_func(*args, **kwargs):                 lock.acquire()                 try:                     return func(*args, **kwargs)                 finally:                     lock.release()             new_func.func_name = func.func_name             new_func.__doc__ = func.__doc__             return new_func         return sync_with_lock    @synchronized(__locker)     def update(data):     """更新計劃任務"""        tasks = self.get_tasks()         delete_task = None        for task in tasks:             if task[PLANTASK.ID] == data[PLANTASK.ID]:                 tasks.insert(tasks.index(task), data)                 tasks.remove(task)                 delete_task = task         r, msg = self._refresh(tasks, delete_task)         return r, msg, data[PLANTASK.ID]

關于Python中怎么使用裝飾器裝飾函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

根河市| 甘谷县| 临颍县| 焉耆| 桑日县| 丹东市| 平顺县| 剑川县| 宜丰县| 城固县| 饶河县| 贺兰县| 永安市| 揭西县| 定远县| 南部县| 宜兰县| 瑞昌市| 中牟县| 丽江市| 托克逊县| 东丽区| 泰宁县| 汝城县| 长武县| 台北市| 台中县| 江达县| 武山县| 昌吉市| 华阴市| 邵阳县| 灌云县| 高尔夫| 普定县| 奉新县| 临夏市| 社旗县| 曲松县| 长宁区| 云浮市|