日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python 中的 @wraps 到底是個啥東西?

來源: 責編: 時間:2024-07-12 17:21:21 138觀看
導讀只要你讀得很快你可能在隨意的 Python 代碼中見過這個 @wraps 的東西,你可能想知道這到底是什么?函數(shù)有元數(shù)據元數(shù)據指的是函數(shù)本身的數(shù)據。def apple(): '''a function that prints apple''' print('apple')print(ap

只要你讀得很快

你可能在隨意的 Python 代碼中見過這個 @wraps 的東西,你可能想知道這到底是什么?tzu28資訊網——每日最新資訊28at.com

函數(shù)有元數(shù)據

元數(shù)據指的是函數(shù)本身的數(shù)據。tzu28資訊網——每日最新資訊28at.com

def apple():  '''a function that prints apple'''  print('apple')print(apple.__name__)  # appleprint(apple.__doc__)   # 打印apple的函數(shù)

例子包括函數(shù)名 .__name__ 或函數(shù) docstring .__doc__tzu28資訊網——每日最新資訊28at.com

裝飾器如何工作

裝飾器用于改變函數(shù)的行為方式,而無需修改任何源代碼。tzu28資訊網——每日最新資訊28at.com

def greet(name):    return 'hello ' + nameprint(greet('tom'))  # hello tom

在這里,我們有一個普通的 greet 功能tzu28資訊網——每日最新資訊28at.com

def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper@add_exclamationdef greet(name):    return 'hello ' + nameprint(greet('tom'))  # hello tom!

我們通過在 greet() 上添加 @add_exclamation 來用 add_exclamation() 來裝飾 greet()。這里,add_exclamation 是裝飾器,greet 是被裝飾的函數(shù)。tzu28資訊網——每日最新資訊28at.com

請注意,greet() 的行為已經改變,而我們根本沒有編輯 greet() 的源代碼。這是裝飾器的功勞。tzu28資訊網——每日最新資訊28at.com

裝飾語法魔術

def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper@add_exclamationdef greet(name):    return 'hello ' + nameprint(greet('tom'))  # hello tom!

這是完全相同的:tzu28資訊網——每日最新資訊28at.com

def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapperdef greet(name):    return 'hello ' + namegreet = add_exclamation(greet)print(greet('tom'))  # hello tom!

注意 “greet = add_exclamation(greet) ”一行。tzu28資訊網——每日最新資訊28at.com

裝飾會導致元數(shù)據丟失

# 沒有裝飾def greet(name):  '''says hello to someone'''  return 'hello ' + nameprint(greet.__name__)  # greetprint(greet.__doc__)   # says hello to someone

在這里,我們可以順利打印 greet() 的元數(shù)據。tzu28資訊網——每日最新資訊28at.com

# 加了裝飾def add_exclamation(func):    def wrapper(name):        return func(name) + '!'    return wrapper@add_exclamationdef greet(name):  '''says hello to someone'''  return 'hello ' + nameprint(greet.__name__)  # wrapperprint(greet.__doc__)   # None

用 add_exclamation 裝飾 greet 后,請注意元數(shù)據發(fā)生了變化。__name__ 變成了 “wrapper”,而 __doc__ 變成了 wrapper 的 docstring。tzu28資訊網——每日最新資訊28at.com

這是因為當我們裝飾 greet 時,我們實際上是在做這件事:tzu28資訊網——每日最新資訊28at.com

greet = add_exclamation(greet)

我們正在將 greet 重新分配給一個由 add_exclamation 返回的函數(shù)--wrapper。tzu28資訊網——每日最新資訊28at.com

這就是為什么當我們嘗試打印 greet.__name__ 和 greet.__doc__ 時,會打印 wrapper 的元數(shù)據的原因。tzu28資訊網——每日最新資訊28at.com

@wraps 防止元數(shù)據在裝飾過程中丟失

from functools import wrapsdef add_exclamation(func):    @wraps(func)    def wrapper(name):        return func(name) + '!'    return wrapper@add_exclamationdef greet(name):  '''says hello to someone'''  return 'hello ' + nameprint(greet.__name__)  # greetprint(greet.__doc__)   # says hello to someone

請注意,盡管使用了 ad_exclamation 裝飾,greet 的元數(shù)據還是回到了正常狀態(tài)。tzu28資訊網——每日最新資訊28at.com

更具體地說,@wraps(something) 用 something 的元數(shù)據覆蓋了函數(shù)的元數(shù)據。這樣,我們原來函數(shù)的元數(shù)據就不會丟失了。tzu28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100714-0.htmlPython 中的 @wraps 到底是個啥東西?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 聊聊2024年Rust加密生態(tài)系統(tǒng)

下一篇: 使用 Docker 搭建 NodeJS 開發(fā)環(huán)境是一種什么體驗?

標簽:
  • 熱門焦點
  • 石頭自清潔掃拖機器人G10S評測:多年黑科技集大成之作 懶人終極福音

    科技圈經常能看到一個詞叫“縫合怪”,用來形容那些把好多功能或者外觀結合在一起的產品,通常這樣的詞是貶義詞,但如果真的是產品縫合的好、縫合的實用的話,那它就成了中性詞,今
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個數(shù)字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業(yè)用途。(幾小時前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為Lla
  • WebRTC.Net庫開發(fā)進階,教你實現(xiàn)屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現(xiàn)視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 自律,給不了Keep自由!

    來源 | 互聯(lián)網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 滴滴違法違規(guī)被罰80.26億 共存在16項違法事實

    滴滴違法違規(guī)被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統(tǒng)和圖形事業(yè)部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現(xiàn)在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
Top 主站蜘蛛池模板: 屏南县| 乐清市| 兴海县| 丰都县| 措勤县| 堆龙德庆县| 东源县| 广东省| 竹北市| 庆元县| 邹平县| 凤翔县| 旬邑县| 策勒县| 屯留县| 周宁县| 津市市| 平顶山市| 民勤县| 化隆| 白河县| 乌鲁木齐县| 肃宁县| 邢台市| 古浪县| 始兴县| 樟树市| 台北市| 曲水县| 尼木县| 从化市| 昭苏县| 什邡市| 乌拉特后旗| 延边| 北票市| 平江县| 镇安县| 大石桥市| 衡山县| 陆良县|