来源:通过标记lutz学习python
内容区域:第503页
类与闭包: 它声明"类可能在状态保留方面看起来更好,因为它们通过属性赋值使它们的记忆更明确。
当保持状态是唯一目标时,闭合功能通常提供更轻量且可行的替代方案。它们为单个嵌套函数所需的数据提供每次调用的本地化存储。状态转换意味着什么?如何通过属性分配使内存更加明确?
任何人都可以提供一个示例,在保留状态的情况下证明闭合权重更轻,并解释在单个嵌套函数的上下文中数据的每个本地化存储意味着什么?
答案 0 :(得分:4)
这是一个简单的闭包:
def make_counter(start=0):
count = start - 1
def counter():
nonlocal count # requires 3.x
count += 1
return count
return counter
你这样称呼它:
>>> counter = make_counter()
>>> counter()
0
>>> counter()
1
>>> # and so on...
正如您所看到的,它会记录它被调用的次数。这个信息被称为"州。"它是"每个呼叫的本地化状态"因为你可以一次制作几个计数器,它们不会相互干扰。在这种情况下,状态(几乎)隐式保留,基于闭包从其封闭范围保留对count
变量的引用。另一方面,课程更明确:
class Counter:
def __init__(self, start=0):
self.count = start - 1
def __call__(self):
self.count += 1
return self.count
此处,状态显式附加到对象。