AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

Python裝飾器演化過程

來源: 責編: 時間:2023-12-11 17:18:57 263觀看
導讀Python 的裝飾器可能是很多初學者難以搞懂的知識點之一,其實以前我也有講解這方面的知識,不過那是在 pandas 專欄里面。今天以另一個角度再次講解裝飾器。場景先看看一開始的代碼:行2:這是今天我們需要實現的裝飾器函數行

Python 的裝飾器可能是很多初學者難以搞懂的知識點之一,其實以前我也有講解這方面的知識,不過那是在 pandas 專欄里面。oZj28資訊網——每日最新資訊28at.com

今天以另一個角度再次講解裝飾器。oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

場景

先看看一開始的代碼:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

  • 行2:這是今天我們需要實現的裝飾器函數
  • 行5:裝飾器函數可以作用到任意其他的函數上
  • 行10:每當調用被裝飾的函數,就會在執行函數之前打印一句內容,運行結束后,打印結果內容

比如 行10 執行后,后臺會輸出。oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

接下來,我們一步步實現 faker 函數。oZj28資訊網——每日最新資訊28at.com

函數名字是變量名而已

前面定義的函數 mysum ,只不過是一個普通變量。就像你用一個變量保存了一個字符串一樣:oZj28資訊網——每日最新資訊28at.com

mystr = 'xxxx'

只不過函數是表達一段代碼(邏輯)。怎么證明?oZj28資訊網——每日最新資訊28at.com

python 中可以用 del 關鍵字刪除一個變量:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

行12 會報錯:oZj28資訊網——每日最新資訊28at.com

NameError: name 'mysum' is not defined

不怕,可以先用另一個變量"接住"函數對象:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

行8:注意了,mysum 后面沒有帶括號。因為函數名 + 括號,才是執行函數體內的代碼。只是寫函數名字,實際上并沒有執行函數。oZj28資訊網——每日最新資訊28at.com

好了,到此為止,下面是初始版本的 faker:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

非常簡單了,應該大家都能理解。不過現在 faker 一點都不像 mysum 呀!調用是這樣子的:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

而且參數 1 和 2 還固定寫在了 faker 里面。oZj28資訊網——每日最新資訊28at.com

那么,先解決參數的問題吧,非常簡單,設置兩個參數就可以:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

用上一開始的"變量假冒法" :oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

但 faker 函數里面仍然有一個固定的東西(行8),那個 other_func 變量永遠指向 mysum 函數(行4)。我們希望 faker 函數可以假冒任意的函數。oZj28資訊網——每日最新資訊28at.com

函數傳遞

我們既然學會了"變量假冒法",那么就能知道,函數對象其實與普通的數據差不多,是可以通過參數傳入另一個函數中。oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

  • 行6:新增一個參數,讓外面把 mysum 傳進來吧,這樣子就變動態了
  • 行12:傳入 mysum 函數。注意,mysum 后面是沒有括號,我們沒有執行 mysum 函數本身

但是顯然,現在代碼報錯了,因為 faker 函數原來的兩個變量 a 和 b 沒有了。就算把 a 和 b 加上,也不行:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

我們并不是要在行12那里執行函數。怎么辦?oZj28資訊網——每日最新資訊28at.com

other_func 參數肯定是需要的,只是直接放在 faker 不行而已。那么就多搞一個函數吧:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

勝利的曙光已經出現了。oZj28資訊網——每日最新資訊28at.com

上面 vs code 已經提示出兩個錯誤。一個個來。oZj28資訊網——每日最新資訊28at.com

第一個問題,行16,我們希望 real_faker 調用后,返回 faker 函數本身。oZj28資訊網——每日最新資訊28at.com

簡單:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

可以看到 行16 沒有提示錯誤了。oZj28資訊網——每日最新資訊28at.com

第二個問題,行12,找不著變量 other_func 。oZj28資訊網——每日最新資訊28at.com

簡單,在函數 real_faker 中,不就有一個大大的參數 other_func 。把整個 faker 函數移進去就可以:oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

現在 real_faker 就是帶有裝飾器效果。不過,可以看到,每次我們要裝飾一個函數,都必須寫上 行17 的代碼。oZj28資訊網——每日最新資訊28at.com

所以,python 提供了一個簡化的語法。oZj28資訊網——每日最新資訊28at.com

oZj28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-42204-0.htmlPython裝飾器演化過程

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

上一篇: 京東員工內網“諫言”劉強東原文部分內容曝光:促銷簡化推進一半,為何沒聲了

下一篇: PyTorch 親自出手,少量代碼讓大模型推理提速10倍!

標簽:
  • 熱門焦點
Top