日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python lock_python lock一步步教你理解Python装饰器

發(fā)布時間:2023/12/4 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python lock_python lock一步步教你理解Python装饰器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

請仔細看我們的decorator實例。我們定義了一個接受單個參數(shù)some_func的名為outer的函數(shù)。在outer內(nèi)部我們定義了一個名為inner的嵌套函數(shù)。inner函數(shù)打印一個字符串然后調(diào)用some_func,在#1處緩存它的返回值。some_func的值可能在每次outer被調(diào)用時不同,但是無論它是什么我們都將調(diào)用它。最終,inner返回some_func的返回值加1,并且我們可以看到,當我們調(diào)用存儲于#2處decorated里的返回函數(shù)時我們得到了輸出的文本和一個返回值2而不是我們期望的調(diào)用foo產(chǎn)生的原始值1.

我們可以說decorated變量是foo的一個“裝飾”版本——由foo加上一些東西構(gòu)成。實際上,如果我們寫了一個有用的decorator,我們可能想用裝飾后的版本來替換foo,從而可以得到foo的“增添某些東西”的版本。我們可以不用學習任何新語法而做到這一點——重新將包含我們函數(shù)的變量進行賦值:>>>?foo?=?outer(foo)

>>>?foo?#?doctest:?+ELLIPSIS

現(xiàn)在任何對foo()的調(diào)用都不會得到原始的foo,而是會得到我們經(jīng)過裝飾的版本!領(lǐng)悟到了一些decorator的思想嗎?

10、裝飾器的語法糖--@符號(The @ symbol applies a decorator to a function)

Python 2.4通過在函數(shù)定義前添加一個@符號實現(xiàn)對函數(shù)的包裝。在上面的代碼示例中,我們用一個包裝了的函數(shù)來替換包含函數(shù)的變量來實現(xiàn)了包裝。>>>?add?=?wrapper(add)

這一模式任何時候都可以用來包裝任何函數(shù),但是如果們定義了一個函數(shù),我們可以用@符號像下面示例那樣包裝它:>>>?@wrapper

...?def?add(a,?b):

...?????return?Coordinate(a.x?+?b.x,?a.y?+?b.y)

請注意,這種方式和用wrapper函數(shù)的返回值來替換原始變量并沒有任何不同,Python只是增添了一些語法糖(syntactic sugar)讓它看起來更明顯一點。

11、*args and **kwargs

我們已經(jīng)寫了一個有用的decorator,但是它是硬編碼的,它只適用于特定種類的函數(shù)——帶有兩個參數(shù)的函數(shù)。我們函數(shù)內(nèi)部的checker函數(shù)接受了兩個參數(shù),然后繼續(xù)將參數(shù)閉包里的函數(shù)。如果我們想要一個能包裝任何類型函數(shù)的decorator呢?讓我們實現(xiàn)一個在不改變被包裝函數(shù)的前提下對每一次被包裝函數(shù)的調(diào)用增添一次計數(shù)的包裝器。這意味著這個decorator需要接受所有待包裝的任何函數(shù)并將傳遞給它的任何參數(shù)傳遞給被包裝的函數(shù)來調(diào)用它(被包裝的函數(shù))。

這種情況很常見,所以Python為這一特性提供了語法支持。請確保閱讀Python Tutorial以了解更多,但是在函數(shù)定義時使用*運算符意味著任何傳遞給函數(shù)的額外位置參數(shù)最終以一個*作為前導。因此:>>>?def?one(*args):

...?????print?args?#?1

>>>?one()

()

>>>?one(1,?2,?3)

(1,?2,?3)

>>>?def?two(x,?y,?*args):?#?2

...?????print?x,?y,?args

>>>?two('a',?'b',?'c')

a?b?('c')

第一個函數(shù)one只是簡單的將任何(如果有)傳遞給它的位置參數(shù)打印出來。正如你在#1處見到的,在函數(shù)內(nèi)部我們只是引用了args變量——*args只是表明在函數(shù)定義中位置參數(shù)應該保存在變量args中。Python也允許我們指定一些變量并捕獲到任何在args變量里的其它參數(shù),正如#2處所示。

*運算符也可以用于函數(shù)調(diào)用中,這時它也有著類似的意義。在調(diào)用一個函數(shù)時帶有一個以*為前導的變量作為參數(shù)表示這個變量內(nèi)容需要被解析然后用作位置參數(shù)。再一次以實例來說明:>>>?def?add(x,?y):

...?????return?x?+?y

>>>?lst?=?[1,?2]

>>>?add(lst[0],?lst[1])?#?1

3

>>>?add(*lst)?#?2

3

#1處的代碼抽取出了和#2處相同的參數(shù)——在#2處Python為我們自動解析了參數(shù),我們也可以像在#1處一樣自己解析出來。這看起來不錯,*args既表示當調(diào)用函數(shù)是從一個iterable抽取位置參數(shù),也表示當定義一個函數(shù)是接受任何額外的位置變量。

當我們引入**時,事情變得更加復雜點,與*表示iterables和位置參數(shù)一樣,**表示dictionaries & key/value對。很簡單,不是么?>>>?def?foo(**kwargs):

...?????print?kwargs

>>>?foo()

{}

>>>?foo(x=1,?y=2)

{'y':?2,?'x':?1}

更多:python lock一步步教你理解Python裝飾器

https://www.002pc.comhttps://www.002pc.com/python/818.html

你可能感興趣的Python,一步步,裝飾,理解

mysql 查出數(shù)據(jù)一對多python使用unittest測試接口步奏詳解

這次給大家?guī)韕ython使用unittest測試接口步奏詳解,python使用unittest測試接口的注意事項有哪些,下面就是實戰(zhàn)案例,一起來看一下。

win7開始菜單 圖標只需兩步實現(xiàn)Windows7系統(tǒng)自動撥號

第一步:建立撥號連接

我們新建一個寬帶連接(開始->控制面板->網(wǎng)絡和Internet->查看網(wǎng)絡狀態(tài)和任務》設置新的連接或網(wǎng)絡-> 連接到 Internet-&gt

互聯(lián)網(wǎng)公司項目總監(jiān)制造業(yè)網(wǎng)絡發(fā)展勢頭較好 張峰四點提議助力下一步持續(xù)發(fā)展

《互聯(lián)網(wǎng)公司項目總監(jiān)制造業(yè)網(wǎng)絡發(fā)展勢頭較好 張峰四點提議助力下一步持續(xù)發(fā)展》總結(jié)了關(guān)于學習電腦教程,對于我們來sfk8網(wǎng)確實能學到不少知識。飛象網(wǎng)訊(九月/文中)現(xiàn)階段,一連

gta5手機互聯(lián)網(wǎng)連接七星基本上該系統(tǒng)星圖布署已完成 邁進南北全世界關(guān)鍵性一步

七星四號基本上該系統(tǒng)星圖布署圓滿完成,我國七星邁進從國外南北國際性、從區(qū)域內(nèi)南北全世界的“關(guān)鍵性一步”。“七

互聯(lián)網(wǎng) 旅游 實習IMT-2020(5S)前進兩組追加兩個專家組:車聯(lián)網(wǎng)成為下一步重點項目

sfk8網(wǎng)認為此文章對《互聯(lián)網(wǎng) 旅游 實習IMT-2020(5S)前進兩組追加兩個專家組:車聯(lián)網(wǎng)成為下一步重點項目》說的很在理。

linux 命令查看用戶教你三步修改linux 主機名

修改 Linux 主機名需要3步。電腦技術(shù)002pc網(wǎng)認為此文章對《linux 命令查看用戶教你三步修改linux 主機名》說的很在理,第二電腦

怎么dos硬盤安裝xpwindowsXP 20步詳細配置

XP配置20步,申精!

1.察看本地共享資源  運行CMD輸入net share,如果看到有異常的共享,那么應該關(guān)閉。但是有時你關(guān)閉共享下次開機的時候又出現(xiàn)了,那么你應該考慮一下,你

家庭接入互聯(lián)網(wǎng)2018年dSIM卡不會跑到哪一步?

飛象網(wǎng)訊(兩匹大友/文)1月底2日消息,dSIM卡早在2011年就被提到,新技術(shù)持續(xù)發(fā)展沒問題,也是一個較為準確的趨勢。但走到3S、穿過4S,5S也要來了,eSIM新技術(shù)一直沒推展起來。這個完全

怎么給電腦安裝字體手動搭建屬于自己的博客 -- 第一步

本來想搞點幽默又不失水平的開場白,敲了一行字果斷刪了,我果然不適合寫點啥,咱還是干實事吧!

今年暑假8月份在家閑著沒事,就想搭建一個個人博客看看,前前后后花了大概2-3天吧,畢竟

0踩

0 贊

總結(jié)

以上是生活随笔為你收集整理的python lock_python lock一步步教你理解Python装饰器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。