复习python基础知识,打卡第七天
Topic sourceGitHub Copilot: 在你的代码中,`create_counter()` 函数返回的是一个生成器函数 `counter()`,而不是一个生成器对象。因此,当你调用 `create_counter()()` 时,返回的是一个函数对象,而不是一个生成器对象。因此,当你尝试使用 `next()` 函数从函数对象中获取下一个值时,会出现 `'function' object is not an iterator` 的错误。
要解决这个问题,你需要将 `create_counter()` 函数返回的生成器函数 `counter()` 调用一次,以创建一个生成器对象。然后,你可以使用 `next()` 函数从生成器对象中获取下一个值。以下是修改后的代码:
```python
def create_counter():
i = 0
def counter():
nonlocal i
while True:
i += 1
yield i
return counter()
gc = create_counter()
print([next(gc) for i in range(10)])
```
在上面的代码中,我们将 `create_counter()` 函数返回的生成器函数 `counter()` 调用一次,以创建一个生成器对象。然后,我们使用 `next()` 函数从生成器对象中获取下一个值,并将其添加到列表中。最后,使用列表推导式输出列表。
请注意,由于生成器对象是一个可迭代对象,因此可以使用 `for` 循环来遍历它。例如,以下代码将生成器对象中的前 10 个值输出到控制台:
```python
for i in range(10):
print(next(gc))
```
- 1
飞云
看到评论里有个网友用生成器做本节练习,感觉代码是没问题的,但运行出错,没想明白,囤着以后再想
@郁闷~喝可乐
def create_counter():
i = 0
def counter():
nonlocal i
while True:
i += 1
yield i
return counter
gc = create_counter()()
print([next(gc) for i in range(10)])
Here the error is:
File "<pyshell#156>", line 1, in <listcomp>
print([next(gc) for i in range(10)])
TypeError: 'function' object is not an iterator