转自:https://blog.csdn.net/alicegotoanother/article/details/79079483
https://www.cnblogs.com/majw/p/8242015.html
方法一:创建生成器
def creatCounter( ):
def f( ):
x = 0
while True:
x = x +1
yield x
sum = f( )
def counter( ):
return next( sum )
return counter
这里没有直接调用f( ),即next( f( ) ),而是用定义sum = f( ),即next( sum ),
因为creatCounter( )返回的是counter这个函数,而此时f( )并没有执行并返回一个生成器对象,而执行next(sum)则会执行f( )生成一个新的生成器对象,变向的理解,s1 = f( ),s2 = f( ),但s1 == s2是false(这个变向理解感觉有点牵强)
方法二:创建列表
def creatCounter():
s = [0]
def counter():
s[0] = s[0] + 1
return s[0]
return counter