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

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

真Python技巧實戰應用,函數參數自動收集并批量處理

來源: 責編: 時間:2023-12-09 15:22:33 306觀看
導讀前言分享一個最近發現的實用小技巧。有時候我會封裝一下別人的庫中的某個功能函數,比如下面是一個第三方庫的函數:函數的參數非常多。而我需要自定義一個與它參數一樣的函數,里面做一些小處理后,調用它的原函數:為了讓函數

前言

分享一個最近發現的實用小技巧。有時候我會封裝一下別人的庫中的某個功能函數,比如下面是一個第三方庫的函數:Mof28資訊網——每日最新資訊28at.com

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

函數的參數非常多。而我需要自定義一個與它參數一樣的函數,里面做一些小處理后,調用它的原函數:Mof28資訊網——每日最新資訊28at.com

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

  • 為了讓函數有智能提示,這里不能使用 *args 與 **kws 收集參數
  • 把傳入的字符串處理一下

這里的問題是,難道我一定要把參數逐一傳入原函數嗎?Mof28資訊網——每日最新資訊28at.com

  • 上面的第29行代碼能不能簡化?
  • 代碼 行 24-27 的處理能不能簡化?

我們首先要知道一點,函數的參數,其實與我們普通定義的變量沒有多大差別。區別只是函數參數只是從外部指定值。Mof28資訊網——每日最新資訊28at.com

既然函數的參數是普通的變量,那么很自然我們可以想到使用內置函數 locals 獲取本地變量字典:Mof28資訊網——每日最新資訊28at.com

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

  • 行24:利用 locals 函數獲取所有參數的字典
  • 行26:利用 ** 解包傳參調用

非常簡單地解決了問題。不過這里注意,最好在函數一開始的時候就做這個事情。這是因為如果在執行 locals 之前,你自己在函數中定義了變量,那么也會保存在 locals 里面。Mof28資訊網——每日最新資訊28at.com

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

  • 行24:不能在調用 locals 之前定義變量

其實有了參數字典,批量處理字符串參數的問題就很容易解決。Mof28資訊網——每日最新資訊28at.com

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

雖然這里沒有什么問題,但是通常來說,我們不應該在遍歷時修改原字典。可以換成推導式或復制再修改Mof28資訊網——每日最新資訊28at.com

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

但是,現在我有好幾個這種間接調用的函數。難道每一個我都要像上面那樣寫一大串代碼嗎?Mof28資訊網——每日最新資訊28at.com

我一開始也想到,這不是很簡單事情嗎,把上面的代碼抽出來,到一個函數就可以:Mof28資訊網——每日最新資訊28at.com

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

需要時,調用即可:Mof28資訊網——每日最新資訊28at.com

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

真的可以嗎?Mof28資訊網——每日最新資訊28at.com

顯然不行。因為調用 locals 時,函數 strip_str_args 根本沒有任何參數!Mof28資訊網——每日最新資訊28at.com

辦法總比困難多,既然不能直接使用 locals ,那就讓外面傳進來吧:Mof28資訊網——每日最新資訊28at.com

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

調用的時候就需要使用 locals:Mof28資訊網——每日最新資訊28at.com

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

還能不能再簡化?每次都要傳入 locals ,不符合我的"懶人"風格。Mof28資訊網——每日最新資訊28at.com

以前我就有兩篇文章講解過調用棧。當 python 每次進入一個函數,都會啟用一個"幀棧",用于保存當前函數執行過程中的信息。這些信息當然包括了定義的變量。Mof28資訊網——每日最新資訊28at.com

其實 locals 函數就是從當前 "幀棧" 獲取的數據:Mof28資訊網——每日最新資訊28at.com

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

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

  • 行16:導入 inspect 模塊
  • 行20:獲取當前幀棧
  • 行24: cur_frame.f_back 獲取上一層幀棧,就是調用這個函數的人的環境信息。 f_locals 相當于獲得了外部傳進來的 locals 字典

現在調用則很簡單了:Mof28資訊網——每日最新資訊28at.com

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

  • 要確保在函數一開始調用

目前,還有一個限制,"確保在函數一開始調用" 。Mof28資訊網——每日最新資訊28at.com

這個限制能去掉嗎?Mof28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-40665-0.html真Python技巧實戰應用,函數參數自動收集并批量處理

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

上一篇: 深入了解Git LFS:高效管理大型文件的利器

下一篇: Python枚舉類:定義、使用和優秀實踐

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 金沙县| 棋牌| 南宁市| 石林| 临武县| 祥云县| 临猗县| 襄汾县| 永城市| 温宿县| 铅山县| 杭锦后旗| 洛浦县| 辰溪县| 宁南县| 永嘉县| 迭部县| 乐昌市| 花垣县| 陇西县| 鄂托克旗| 枣庄市| 乐业县| 泰州市| 曲周县| 田东县| 蒙山县| 沾益县| 岫岩| 琼中| 新龙县| 周口市| 赤峰市| 临西县| 冕宁县| 泰宁县| 兴城市| 楚雄市| 巴彦淖尔市| 芜湖市| 江华|