n = 0
def increment():
global n
n = n + 1
return n
for chunk in iter(lambda: increment(), 4):
print(chunk)
打算把 lambda 修改为类似 lambda: (n += 1, n)
,这样就可以省去 increment() 函数的定义,但是发现不行,修改为 lambda: n += 1
也是不行的,可能是 python 是没有赋值表达式的说法。同样的逻辑能否实现省去 increment() 函数?
iter(lambda: increment(), 4) 不是逗号表达式。它是 iter 函数的调用,其中第一个参数是一个 lambda 表达式,第二个参数是哨兵值。
在 Python 3.8 之前的版本中(例如 Python 3.7 及更早版本),不支持在 lambda 表达式中使用赋值表达式(海象运算符 :=)。在 Python 3.8 及以上版本中,可以使用赋值表达式(也称为“海象运算符” :=)在 lambda 表达式中进行赋值。
例如
在这个例子中,prefix := 'Hello' 在 lambda 表达式中进行了赋值操作。
针对你的问题可以使用以下三种写法
使用闭包实现
使用 itertools.count
使用生成器
如果你只是需要一个简单的计数器,我推荐使用 itertools.count,因为它最简洁明了。如果你需要更复杂的逻辑或状态管理,生成器方法会更合适。