下面的代码很奇怪

时间:2014-04-17 10:19:53

标签: python closures

    >>> def counter(start_at=0):
...     count = [start_at]
...     def incr():
...             count[0] += 1
...             return count[0]
...     return incr
...
>>> count = counter(7)
>>> print count()
8
>>> print count()
9

上面的代码运行正常。我明白。但我认为以下代码应与上述相同。

    >>> counter(7)()
8
>>> counter(7)()
8

嗯,它不像打印计数()。为什么呢?

2 个答案:

答案 0 :(得分:1)

原因是每次counter(7)调用都会创建一个单独的count实例和单独的incr函数。当你调用它们时,你实际上引用了不同的变量count,因此结果如上所示。

答案 1 :(得分:0)

如果您想要计数器和计数的相同行为,请遵循以下代码:

>>> count = counter
>>> print count(7)
8
>>> print count(7)
8