一、将函数作为变量去使用
在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() 后,在调用该函数时直接传入你需要调用的函数名即可返回你需要的函数,用变量接收即可使用,如上面的代码。