国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python中將函數作為另一個函數的參數傳入并調用的方法

2020-02-16 00:49:25
字體:
來源:轉載
供稿:網友

在Python中,函數本身也是對象,所以可以將函數作為參數傳入另一函數并進行調用

在舊版本中,可以使用apply(function, *args, **kwargs)進行調用,但是在新版本中已經移除,以function(*args, **kwargs)進行替代,所以也不應該再使用apply方法

示例代碼:

def func_a(func, *args, **kwargs):  print(func(*args, **kwargs))def func_b(*args):  return argsif __name__ == '__main__':  func_a(func_b, 1, 2, 3)

在代碼中,將函數func_b作為函數func_a的參數傳入,將函數func_b的參數以元組args傳入,并在調用func_b時,作為func_b的參數。

運行結果:

(1, 2, 3)

但是這里存在一個問題,但func_a和func_b需要同名的參數時,就會出現異常,如:

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作為參數傳入func中進行調用,可以正常運行,但這明顯不符合設計初衷:在func_a中執行func(**kwargs)時,很可能并不知道func到底需要什么參數。換句話說,如果已經提前知道需要調用什么函數,那完全不必要把函數作為參數傳入另一個函數并調用,直接調用函數即可。

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)

當加入第三個函數,func_c,它不需要arg_a這個參數時,就會出現問題。

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中將函數作為另一個函數的參數傳入并調用的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐昌市| 鄢陵县| 大连市| 雅江县| 都兰县| 嘉黎县| 宝鸡市| 喀喇沁旗| 兴仁县| 诏安县| 鹤庆县| 康乐县| 左云县| 溧水县| 仙游县| 乳山市| 黄浦区| 兖州市| 嵩明县| 常宁市| 衢州市| 繁峙县| 梧州市| 白城市| 玉溪市| 封丘县| 米脂县| 孟村| 长乐市| 镇巴县| 湄潭县| 皮山县| 河北省| 玉龙| 临泽县| 丹江口市| 黄骅市| 齐河县| 河西区| 建阳市| 富阳市|