一、將函數作為變量去使用
在Python中函數也是一種對象,是一種名為function的對象,所以可以將函數賦值給變量,類似整數、浮點數、列表、元組、字典賦值給變量。
我們編寫如下程序:
1 #coding=utf-8 2 def power(base,exponent): 3 """定義函數:計算乘方""" 4 result = 1 5 for i in range(1,exponent + 1): 6 result *= base 7 return result 8 9 my_function = power 10 print(my_function(2,3))
運行程序之后控制台打印如下:
解釋:我們先定義了一個函數名為power作用就是用來計算乘方,第一個參數為底數,第二個參數為指數,第9行,我們將power() 函數賦值給變量my_pow,所以在第10行我們就可以用my_pow調用power() 函數了,有此可見,我們可以在程序不同的時間或者位置將my_function指向其他已定義過的函數進行調用,從而使程序更加靈活的運行,所以這是使用函數變量的一大好處。
二、將函數作為一個函數的形參
有時候定義一個這樣的函數:該函數大部分計算邏輯都能確定,但是有些處理邏輯無法確定,所以某些程序代碼需要根據具體情況改變,此時我們可以使用函數形參來解決,這樣就可以在調用函數時傳入不同函數作為參數,從而動態改變這段代碼。
我們編寫如下的栗子:
1 #coding=utf-8 2 def funcs(data,fn): 3 """fn形參為函數類型即是function類型""" 4 result=[] 5 for x in data: 6 result.append(fn(x)) #在將data中的元素遍歷、計算后放入新數組 7 return result 8 9 def square(x): 10 """計算一個數的平方並返回""" 11 return x*x 12 13 def cube(x): 14 """計算一個數的三次方並返回""" 15 return x*x*x 16 17 def factorial(x): 18 """計算一個數的階乘並返回""" 19 result = 1 20 for index in range(2,x+1): 21 result *= index 22 return result 23 24 data = [2,3,4,9,8,7] 25 print("原數據:", data) 26 #在傳入不同的函數對象給funcs函數后會得到不同的結果 27 print("計算列表元素的平方:") 28 print(funcs(data,square)) 29 print("計算列表元素的三次方:") 30 print(funcs(data,cube)) 31 print("計算列表元素的階乘:") 32 print(funcs(data,factorial)) 33 print("funcs函數的類型:") 34 print(type(funcs))
在運行程序后,控制台打印如下:
從上面的例子中,可以看出函數可以作為參數,在調用函數時動態傳入,這樣即使數據是相同的,但實際調用的函數不同。在第34行,我們打印了funcs函數的類型,是function類型即function對象。
三、將函數作為另一個函數的返回值
將上面的代碼稍作改變即可:
1 #coding=utf-8 2 def get_funcs(func_name): 3 4 5 def square(x): 6 """計算一個數的平方並返回""" 7 return x*x 8 9 def cube(x): 10 """計算一個數的三次方並返回""" 11 return x*x*x 12 13 def factorial(x): 14 """計算一個數的階乘並返回""" 15 result = 1 16 for index in range(2,x+1): 17 result *= index 18 return result 19 """根據傳入func_name返回局部函數""" 20 if func_name == "square": 21 return square 22 elif func_name == "cube": 23 return cube 24 else: 25 return factorial 26 27 28 #在傳入不同的參數名給funcs函數后會得到不同的函數對象 29 print("計算數字4的平方:") 30 my_funct = get_funcs("square") 31 print(my_funct(4)) 32 print("計算數字5的三次方:") 33 my_funct = get_funcs("cube") 34 print(my_funct(5)) 35 print("計算數字6的階乘:") 36 my_funct = get_funcs("other_function") 37 print(my_funct(6))
運行程序,控制台打印如下:
解釋:在定義了返回函數的函數get_funcs() 后,在調用該函數時直接傳入你需要調用的函數名即可返回你需要的函數,用變量接收即可使用,如上面的代碼。