在函数体内定义函数,这种被放在函数体内定义的函数称为局部函数。局部函数对外部是隐藏的
只能在其封闭函数内有效
封闭函数也可以返回局部函数
# 定义函数,该函数会包含局部函数def get_math_func(type, nn) : # 定义一个计算平方的局部函数 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 # 调用局部函数 if type == "square" : return square(nn) elif type == "cube": return cube(nn) else: return factorial(nn)print(get_math_func("square", 3)) # 输出9print(get_math_func("cube", 3)) # 输出27print(get_math_func("", 3)) # 输出6
使用函数变量
把函数本身赋值给变量,就像给变量赋值一样。就可以通过该变量来调用函数。对变量赋值不同的函数,让变量在不同的时间指向不通过的函数。# 定义一个计算乘方的函数def pow(base, exponent) : result = 1 for i in range(1, exponent + 1) : result *= base return result# 将pow函数赋值给my_fun,则my_fun可当成pow使用my_fun = powprint(my_fun(3 , 4)) # 输出81# 定义一个计算面积的函数def area(width, height) : return width * height# 将area函数赋值给my_fun,则my_fun可当成area使用my_fun = areaprint(my_fun(3, 4)) # 输出12
使用函数作为函数形参
# 定义函数类型的形参,其中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 resultdata = [3 , 4 , 9 , 5, 8]print("原数据: ", data)# 下面程序代码3次调用map()函数,每次调用时传入不同的函数print("计算数组元素的平方")print(map(data , square))print("计算数组元素的立方")print(map(data , cube))print("计算数组元素的阶乘")print(map(data , factorial))# 获取map的类型print(type(map))
使用函数作为返回值
def get_math_func(type) : # 定义一个计算平方的局部函数 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 # 返回局部函数 if type == "square" : return square if type == "cube" : return cube else: return factorial# 调用get_math_func(),程序返回一个嵌套函数math_func = get_math_func("cube") # 得到cube函数print(math_func(5)) # 输出125math_func = get_math_func("square") # 得到square函数print(math_func(5)) # 输出25math_func = get_math_func("other") # 得到factorial函数print(math_func(5)) # 输出120
本节从代码去看更为直观,下一课我们分享一下lambda表达式。关注我,点赞转发!