这是一个简单的关闭:
def make_counter(start=0):
count = start - 1
def counter():
nonlocal count # requires 3.x
count += 1
return count
return counter
Run Code Online (Sandbox Code Playgroud)
您这样称呼它:
>>> counter = make_counter()
>>> counter()
0
>>> counter()
1
>>> # and so on...
Run Code Online (Sandbox Code Playgroud)
如您所见,它跟踪被调用了多少次。该信息称为“状态”。这是“每次呼叫本地化状态”,因为您可以一次创建多个计数器,并且它们不会互相干扰。在这种情况下,基于闭包状态(几乎)隐式地保留状态,该闭包保留count
对其封闭范围内变量的引用。另一方面,一个类会更明确:
class Counter:
def __init__(self, start=0):
self.count = start - 1
def __call__(self):
self.count += 1
return self.count
Run Code Online (Sandbox Code Playgroud)
这里,状态显式附加到对象。
归档时间: |
|
查看次数: |
410 次 |
最近记录: |