自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

真Python技巧實(shí)戰(zhàn)應(yīng)用,函數(shù)參數(shù)自動(dòng)收集并批量處理

開(kāi)發(fā) 前端
本文分享一個(gè)關(guān)于Python的實(shí)用小技巧,理解函數(shù)參數(shù)自動(dòng)收集并批量處理。

前言

分享一個(gè)最近發(fā)現(xiàn)的實(shí)用小技巧。有時(shí)候我會(huì)封裝一下別人的庫(kù)中的某個(gè)功能函數(shù),比如下面是一個(gè)第三方庫(kù)的函數(shù):

函數(shù)的參數(shù)非常多。而我需要自定義一個(gè)與它參數(shù)一樣的函數(shù),里面做一些小處理后,調(diào)用它的原函數(shù):

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

這里的問(wèn)題是,難道我一定要把參數(shù)逐一傳入原函數(shù)嗎?

  • 上面的第29行代碼能不能簡(jiǎn)化?
  • 代碼 行 24-27 的處理能不能簡(jiǎn)化?

我們首先要知道一點(diǎn),函數(shù)的參數(shù),其實(shí)與我們普通定義的變量沒(méi)有多大差別。區(qū)別只是函數(shù)參數(shù)只是從外部指定值。

既然函數(shù)的參數(shù)是普通的變量,那么很自然我們可以想到使用內(nèi)置函數(shù) locals 獲取本地變量字典:

  • 行24:利用 locals 函數(shù)獲取所有參數(shù)的字典
  • 行26:利用 ** 解包傳參調(diào)用

非常簡(jiǎn)單地解決了問(wèn)題。不過(guò)這里注意,最好在函數(shù)一開(kāi)始的時(shí)候就做這個(gè)事情。這是因?yàn)槿绻趫?zhí)行 locals 之前,你自己在函數(shù)中定義了變量,那么也會(huì)保存在 locals 里面。

  • 行24:不能在調(diào)用 locals 之前定義變量

其實(shí)有了參數(shù)字典,批量處理字符串參數(shù)的問(wèn)題就很容易解決。

雖然這里沒(méi)有什么問(wèn)題,但是通常來(lái)說(shuō),我們不應(yīng)該在遍歷時(shí)修改原字典??梢該Q成推導(dǎo)式或復(fù)制再修改

但是,現(xiàn)在我有好幾個(gè)這種間接調(diào)用的函數(shù)。難道每一個(gè)我都要像上面那樣寫(xiě)一大串代碼嗎?

我一開(kāi)始也想到,這不是很簡(jiǎn)單事情嗎,把上面的代碼抽出來(lái),到一個(gè)函數(shù)就可以:

需要時(shí),調(diào)用即可:

真的可以嗎?

顯然不行。因?yàn)檎{(diào)用 locals 時(shí),函數(shù) strip_str_args 根本沒(méi)有任何參數(shù)!

辦法總比困難多,既然不能直接使用 locals ,那就讓外面?zhèn)鬟M(jìn)來(lái)吧:

調(diào)用的時(shí)候就需要使用 locals:

還能不能再簡(jiǎn)化?每次都要傳入 locals ,不符合我的"懶人"風(fēng)格。

以前我就有兩篇文章講解過(guò)調(diào)用棧。當(dāng) python 每次進(jìn)入一個(gè)函數(shù),都會(huì)啟用一個(gè)"幀棧",用于保存當(dāng)前函數(shù)執(zhí)行過(guò)程中的信息。這些信息當(dāng)然包括了定義的變量。

其實(shí) locals 函數(shù)就是從當(dāng)前 "幀棧" 獲取的數(shù)據(jù):

  • 行16:導(dǎo)入 inspect 模塊
  • 行20:獲取當(dāng)前幀棧
  • 行24: cur_frame.f_back 獲取上一層幀棧,就是調(diào)用這個(gè)函數(shù)的人的環(huán)境信息。 f_locals 相當(dāng)于獲得了外部傳進(jìn)來(lái)的 locals 字典

現(xiàn)在調(diào)用則很簡(jiǎn)單了:

  • 要確保在函數(shù)一開(kāi)始調(diào)用

目前,還有一個(gè)限制,"確保在函數(shù)一開(kāi)始調(diào)用" 。

這個(gè)限制能去掉嗎?

責(zé)任編輯:趙寧寧 來(lái)源: 數(shù)據(jù)大宇宙
相關(guān)推薦

2021-03-27 10:54:34

Python函數(shù)代碼

2025-02-21 12:30:00

字符串前端JavaScript

2023-11-20 22:07:51

PythonPDF

2013-06-27 10:26:53

Sqlmap注入

2009-12-08 09:51:10

PHP intval函

2009-12-11 10:59:48

PHP函數(shù)extrac

2020-06-03 15:14:10

大數(shù)據(jù)代碼開(kāi)發(fā)

2021-07-12 11:41:55

鴻蒙HarmonyOS應(yīng)用

2009-06-25 14:05:40

Java應(yīng)用技巧

2025-04-02 12:00:00

開(kāi)發(fā)日志記錄Python

2009-12-10 11:02:44

PHP函數(shù)eval()

2009-12-10 17:09:42

PHP編碼轉(zhuǎn)換函數(shù)

2024-01-23 11:21:24

2022-09-19 11:41:39

數(shù)據(jù)分析Python數(shù)學(xué)模型

2010-02-06 17:21:20

C++ CreateT

2009-07-17 10:42:06

Swing應(yīng)用程序處理函數(shù)

2012-11-28 11:09:28

IBMdW

2014-06-11 10:29:03

2025-04-03 02:22:00

事務(wù)處理信息自動(dòng)收集

2010-02-05 13:44:06

C++ eof()函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)