在Python中將函數(shù)作為另一個函數(shù)的參數(shù)傳入并調(diào)用的方法
在Python中,函數(shù)本身也是對象,所以可以將函數(shù)作為參數(shù)傳入另一函數(shù)并進(jìn)行調(diào)用
在舊版本中,可以使用apply(function, *args, **kwargs)進(jìn)行調(diào)用,但是在新版本中已經(jīng)移除,以function(*args, **kwargs)進(jìn)行替代,所以也不應(yīng)該再使用apply方法
示例代碼:
def func_a(func, *args, **kwargs): print(func(*args, **kwargs)) def func_b(*args): return args if __name__ == '__main__': func_a(func_b, 1, 2, 3)
在代碼中,將函數(shù)func_b作為函數(shù)func_a的參數(shù)傳入,將函數(shù)func_b的參數(shù)以元組args傳入,并在調(diào)用func_b時,作為func_b的參數(shù)。
運(yùn)行結(jié)果:
(1, 2, 3)
但是這里存在一個問題,但func_a和func_b需要同名的參數(shù)時,就會出現(xiàn)異常,如:
def func_a(arg_a, func, **kwargs): print(arg_a) print(func(**kwargs)) def func_b(arg_a): print(arg_a) if __name__ == '__main__': func_a(arg_a='Hello Python', func=func_b)
異常信息:
TypeError: func_b() missing 1 required positional argument: 'arg_a'
雖然通過修改,手動將arg_a作為參數(shù)傳入func中進(jìn)行調(diào)用,可以正常運(yùn)行,但這明顯不符合設(shè)計初衷:在func_a中執(zhí)行func(**kwargs)時,很可能并不知道func到底需要什么參數(shù)。換句話說,如果已經(jīng)提前知道需要調(diào)用什么函數(shù),那完全不必要把函數(shù)作為參數(shù)傳入另一個函數(shù)并調(diào)用,直接調(diào)用函數(shù)即可。
def func_a(arg_a, func, **kwargs): print(arg_a) func(arg_a=arg_a, **kwargs) def func_b(arg_a): print(arg_a) if __name__ == '__main__': func_a(arg_a='Hello Python', func=func_b)
當(dāng)加入第三個函數(shù),func_c,它不需要arg_a這個參數(shù)時,就會出現(xiàn)問題。
def func_a(arg_a, func, **kwargs): print(arg_a) func(arg_a=arg_a, **kwargs) def func_b(arg_a): print(arg_a) def func_c(): print('Hello World') if __name__ == '__main__': func_a(arg_a='Hello Python', func=func_b) func_a(arg_a='Hello Python', func=func_c)
以上這篇在Python中將函數(shù)作為另一個函數(shù)的參數(shù)傳入并調(diào)用的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
超詳細(xì)注釋之OpenCV操作圖像平移轉(zhuǎn)換
這篇文章主要介紹了OpenCV操作圖像平移轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Python Matplotlib繪制箱型圖(箱線圖)boxplot的方法詳解
箱線圖(箱型圖)主要作用是發(fā)現(xiàn)數(shù)據(jù)內(nèi)部整體的分布分散情況,包括上下限、各分位數(shù)、異常值等,本文為大家整理了Matplotlib繪制箱型圖的所以方法,希望對大家有所幫助2023-05-05Python+Opencv實現(xiàn)把圖片、視頻互轉(zhuǎn)的示例
這篇文章主要介紹了Python+Opencv實現(xiàn)把圖片、視頻互轉(zhuǎn)的示例,幫助大家更好的理解和實用python,感興趣的朋友可以了解下2020-12-12AI生成圖片Stable?Diffusion環(huán)境搭建與運(yùn)行方法
Stable?Diffusion是一種基于擴(kuò)散過程的生成模型,由Ge?et?al.在2021年提出,該模型利用了隨機(jī)變量的穩(wěn)定分布,通過遞歸地應(yīng)用擴(kuò)散過程來生成高質(zhì)量的圖像,這篇文章主要介紹了AI圖片生成Stable?Diffusion環(huán)境搭建與運(yùn)行,需要的朋友可以參考下2023-05-05python?中的requirements.txt?文件的使用詳情
這篇文章主要介紹了python?中的requirements.txt文件的使用詳情,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05Python地理地圖可視化folium標(biāo)記點(diǎn)彈窗設(shè)置代碼(推薦)
這篇文章主要介紹了Python地理地圖可視化folium標(biāo)記點(diǎn)彈窗設(shè)置,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Python flask框架定時任務(wù)apscheduler應(yīng)用介紹
Flask是Python社區(qū)非常流行的一個Web開發(fā)框架,本文將嘗試將介紹APScheduler應(yīng)用于Flask之中實現(xiàn)定時任務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10