函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可以作为其他函数的返回值。
1 函数变量的使用
python的函数也是一种值,所有函数都是function对象,意味着可以把函数本身赋值给变量,和整数,浮点数,列表,元组赋值给变量一样。
如下示例,使用pycharm工具进行python编码,如无特殊说明,都是使用该工具。
#定义计算乘方的函数
def power(base, exponent):
result = 1
for i in range(1, exponent + 1):
result *= base
return result
#将power函数赋值给my_fun,则my_fun可被当成power使用
my_fun = power
print(my_fun(2, 3))
打印输出结果为:8
2 使用函数作为函数形参
有时候定义一个函数,函数的大部分计算逻辑都能确认,但某些逻辑处理暂时无法确认-即意味着某些程序需要动态改变,如果需要调用函数时能动态传入这些代码,就可以在函数中定义函数形参。这样可以在调用函数时传入不同的函数作为参数,从而动态改变这段代码。
#定义函数类型的形参,其中fn是一个函数
def map(data, fn):
result = []
'''
遍历data列表中的每个元素,并用fn函数对每个元素进行计算
然后将计算结果作为新数组的元素
'''
for e in data:
result.append(fn(e))
return result
#定义一个计算平方的函数
def square(n):
return n * n
#定义一个计算立方的函数
def cube(n):
return n * n * n
#定义一个计算阶乘的函数
def factorial(n):
result =1
for index in range(2, n+1):
result *= index
return result
#定义一个列表数据
data = [4, 7, 9, 12, 8]
print("原始数据:", data)
#调用map()函数,每次传入不同的函数
print("计算平方")
print(map(data, square))
print("计算立方")
print(map(data, cube))
print("计算阶乘")
print(map(data, factorial))
print(type(map))
打印的结果:
原始数据: [4, 7, 9, 12, 8]
计算平方
[16, 49, 81, 144, 64]
计算立方
[64, 343, 729, 1728, 512]
计算阶乘
[24, 5040, 362880, 479001600, 40320]
<class 'function'>
3 使用函数作为返回值
#定义返回函数
def get_math_func(type):
#定义一个计算平方的局部函数
def square(n):
return n * n
# 定义一个计算立方的局部函数
def cube(n):
return n * n * n
#定义一个输入错误类型时返回的函数
def err(n):
return '输入参数错误'
#返回局部函数
if type == "square":
return square
elif type == "cube":
return cube
else:
return err
#调用get_math_func,程序返回一个嵌套函数
math_func = get_math_func('square')
print(math_func(2))
math_func = get_math_func('cube')
print(math_func(2))
math_func = get_math_func('hhhh')
print(math_func(8))
打印输出结果
4
8
输入参数错误
4 使用lambda表达式代替局部函数
lambda表达式的语法格式:
lambda [parameter_list] : 表达式
改写上面的示例
def get_math_func(type):
#使用lambda表达式
if type == "square":
return lambda n: n * n
elif type == "cube":
return lambda n : n * n * n
else:
return lambda s : '输入的参数有问题哦!'
#调用get_math_func,程序返回一个嵌套函数
math_func = get_math_func('square')
print(math_func(2))
math_func = get_math_func('cube')
print(math_func(2))
math_func = get_math_func('hhhh')
print(math_func(8))
输出的结果:
4
8
输入的参数有问题哦!