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

今天小編就爲大家分享一篇在Python中將函數作爲另一個函數的參數傳入並調用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
在Python中,函數本身也是對象,所以可以將函數作爲參數傳入另一函數並進行調用

在舊版本中,可以使用apply(function, *args, **kwargs)進行調用,但是在新版本中已經移除,以function(*args, **kwargs)進行替代,所以也不應該再使用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)

在代碼中,將函數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學習聚集地,[點擊進入],這裏有我收集以前學習心得,學習筆記,還有一線企業的工作經驗,且給大定on零基礎到項目實戰的資料,大家也可以在下方,留言,把不懂的提出來,大家一起學習進步
以上這篇在Python中將函數作爲另一個函數的參數傳入並調用的方法就是小編分享給大家的全部內容了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章