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

内部函数

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

# 使用内部函数时需要注意缩进
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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值