来源:学习python,作者:Mark Lutz
内容区域:页 #503
类与闭包:它指出,"类在状态保留方面似乎更好,因为它们通过属性赋值使其记忆更加明确。
闭包函数通常在保持状态是唯一目标时提供更轻量级和可行的替代方案。它们为单个嵌套函数所需的数据提供每次调用的本地化存储。
state-rentention 是什么意思,它如何通过属性赋值使内存更明确?
谁能提供一个示例来证明在保留状态的情况下闭包的重量更轻,并解释在单个嵌套函数的上下文中每个本地化的数据存储意味着什么?
这是一个简单的闭包:
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
在这里,状态显式附加到对象。