Python 中的嵌套函数,简单来说就是在一个函数的内部定义另外一个函数。不过在内部定义的函数只能在内部调用,如果在外部调用,就会出错。
示例:Python 嵌套函数用于计算阶乘
def fn(a):
# 定义内部函数
def multi(x):
return x * x
m = 1
for i in range(1, multi(a) + 1):
m = m * i
return m
result = fn(2) + fn(3)
print(result)运行结果如下。
362904分析:
上面示例定义了一个名为 fn 的函数,该函数有一个参数 a。然后在 fn() 内部定义了一个函数 multi()。其中 multi() 作为一个内部函数,只能在函数 fn() 内部使用。
对于 fn(2),我们把 2 作为实参传进去,此时 fn(2) 等价于下面代码。
def fn(2):
def multi(2):
return 2 * 2
m = 1
for i in range(1, multi(2) + 1):
m = m * i
return m从上面可以看出,fn(2) 实现的是 1 × 2 × 3 × 4,也就是 4 的阶乘。同理,fn(3) 实现的是 1 × 2 × … × 9,也就是 9 的阶乘。
Python 嵌套函数的功能非常强大,并且与 “闭包” 这个高级概念有着直接的关系。如果小伙伴们刚接触 Python,暂时不必深入了解闭包。
常见问题
1. 为什么要把 multi 定义在 fn 内部?
这样做是为了 “隐藏” 逻辑。如果 multi 函数只是为了辅助 fn 完成计算,而不需要在程序的其他地方使用,那么把它定义在内部可以避免污染外部的命名空间,让代码更加整洁和安全。
