zl程序教程

您现在的位置是:首页 >  其它

当前栏目

1-05-1 内部函数与闭包

函数 内部 05 闭包
2023-09-14 09:12:58 时间

内部函数

在函数内部又有定义函数,内部的函数称之为内部函数。

# 使用内部函数时需要注意缩进
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