内部函数
在函数内部又有定义函数,内部的函数称之为内部函数。
# 使用内部函数时需要注意缩进
def OuterFun():
print('...函数:OuterFun 被调用...')
def innerFun():
print('...函数:innerFun 被调用...')
# innerFun 只能在 OuterFun 中被调用
innerFun()
OuterFun()
------------------------------------------
# 输出结果如下:
...函数:OuterFun 被调用...
...函数:innerFun 被调用...
闭包
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).
def OuterFun(x):
# 定义一个内部函数
def closureFun(y):
# 引用了外部作用域 OuterFun() 中的变量 x
print('x=%d, y=%d' % (x,y))
return x*y
# 不带括号调用的是函数本身,带括号调用的是函数的return
return closureFun
a = OuterFun(10)
a(20)
------------------------------------------
# 输出结果如下:
x=10,y=20
200
闭包使用的场域是在调用函数时希望可以存取函数内部变量,下方为一计数器的应用。
def counterFunc(counter=0):
def closureFunc():
nonlocal counter
counter += 1
print('counter:',counter)
return counter
return closureFunc
cnt = counterFunc()
cnt()
cnt()
cnt()
------------------------------------------
# 输出结果如下
counter: 1
counter: 2
counter: 3