Discuss / Python / 利用生成器和闭包返回递增计数器

利用生成器和闭包返回递增计数器

Topic source

def createCounter():

# 定义生成器
def f():
    n = 1
    while True:
       yield n
       n += 1

# 返回函数      
gen = f()
def counter():
    return next(gen)

return counter

方法二:

def createCounter(): x = [0] def counter(): x[0] += 1 return x[0]
return counter

方法三:

def createCounter(): x = 0
def counter(): nonlocal x x += 1 return x
return counter

nonlocal关键字使得闭包中内部函数可以访问和修改外部函数中定义的局部变量x,奇妙的是当x是列表时并不需要使用该关键字

第二种方法中:x指向了一个list, 类似于元组中套用list,指向是不变的, 但是list内容可以被函数内部的第二层函数改变

test

  • 看了你的第三种方法瞬间秒懂了, 看了注释大概清楚第二中方法了

Iterator和是闭包函数的一种吗?

瓶碰盆

#7 Created at ... [Delete] [Delete and Lock User]

利用生成器 ---这种方法算闭包吗?

早MorL

#8 Created at ... [Delete] [Delete and Lock User]

def createCounter(): def counter(sum = [0]): sum[0] += 1 return sum[0] return counter

整那么多,花里胡哨的

nonlocal关键字使得闭包中内部函数可以访问和修改外部函数中定义的局部变量x,奇妙的是当x是列表时并不需要使用该关键字

为什么。


  • 1

Reply