Python - Decorator(装饰器) - Cell和Free Variable

谈到装饰器(decorator),离不开闭包(closure)!

谈到闭包(closure),离不开Cell和Free Variable!

只要理解了Cell和Free Variable,那才算是真正地理解了闭包和装饰器!

什么是Cell和Free Variable

我们先来看Free Variable。我们知道Python的变量(variable)都是在某个作用域中的。这4个作用域你一定了解,local, nonlocal, global(module) 和 built-in。某个变量名在作用域中的查找顺序这里就不赘述了。我们可以说local variable, global variable等等。那free variable又是怎么回事呢?

Free Variable中的“Free”就是自由的意思。自由变量,说明这个变量不是属于之前提到的4个作用域中,它很“自由”。那Python又是怎么去引用它的呢?

Python是通过Cell间接引用Free Variable。

此处你一定有个疑问,为什么得通过Cell间接引用Free Variable?为什么不直接引用Free Variable?

那我们就看看闭包直接引用自由变量有什么问题。

如下图,如果只有一个闭包在引用自由变量,而且自由变量是属于不可改变(immutable)的类型,那我们必须得先创建一个值,然后再修改闭包中的引用地址去引用新值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值