0
点赞
收藏
分享

微信扫一扫

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

目标践行者 2022-04-16 阅读 38
Python

内部函数

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

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

相关推荐

0 条评论