少儿编程python授课ppt_(45)python少儿编程之闭包

  • 自由变量:未在本地作用域中定义的变量。例如定义在内存函数外的外层函数的作用域中的变量
  • 闭包:出现在嵌套中,指的是内层函数引用到了外层函数的自由变量,就形成了闭包。
4880eb8adc5c642a2acef6e4e15d73a1.png
  • 如图,列表c就是自由变量,在inc函数中,我们发现直接+1 ,竟然没有报错,此时c[0]只是引用的元素,没有重新定义其c变量本身,此时就形成了闭包,当我们调用了两次foo(),这个引用元素就加了2次1,等于了12.
  • 这里又出现了一个问题,这里的c只是引用类型的,只修改元素的情况下确实可以做到闭包,那我们想对普通变量使用闭包呢?这里要引出新的关键字nonlocal关键字

nonlocal关键字

  • 使用了nonlocal关键字,将变量标记在上级的局部作用域中定义,但不能在全局作用域定义
d0aa8b0647360c2851b0643c082a8c32.png
  • 如图,在counter()的内部函数inc()里面使用了nonlocal即可,如果在counter下面调用就是错误的,如下图
257fd4dbdcf0d46bc3d04321f9202855.png
  • 此时a就调用了全局变量,这是错误的

每天的内容简单点,轻松点!

8bd3ba5d2b29273ea9bf3eac23cbac67.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值