python - 为什么我不能使用方法类作为生成器?
问题描述
我处于一个非常奇怪的境地。我知道我可以像以前那样使用方法类作为生成器。在另一个问题中,类中的方法可以生成器吗?有人要求同样的事情,他们说是的,可以做到。
但是,当我尝试时出现错误。这是一个最小的例子:
class SomeClass(object):
def first_ten(self):
for i in range(10):
yield i
a = SomeClass();
next(a.first_ten)
“方法”对象不是迭代器
为什么?这怎么可能?谢谢编辑:固定代码缩进
解决方案
您需要调用该方法:
a = SomeClass()
it = a.first_ten()
next(it)
原因是该方法本身不是生成器。它是一个生成器函数,每次调用时都会返回一个新的生成器。
这同样适用于非方法生成器函数。请注意此代码段中的类型:
>>> def f():
... yield from range(10)
...
>>> type(f)
<class 'function'>
>>> type(f())
<class 'generator'>
推荐阅读
- reactjs - 反应:使用图像作为链接
- javascript - 反应钩子改变状态对象值
- javascript - 重启后 Discord.js 反应角色不起作用
- graphql - 如何使用 ChildImageSharp 从另一个可能包含图像 url 的节点字段创建新的 Gatsby GraphQL 节点?
- django-models - 从 Django 中的 3rd 方库更改模型字段
- coq - 如何在 coq 中证明 n <= n + S m?
- python - 如何按样本加快 pandas 分组?
- azure - 如何通过 curl 生成存储帐户 SAS 令牌
- ruby-on-rails - Ruby on Rails 验证其他列存在的唯一性
- camera - USB HOST UVC 相机 FTDI Vinculum-II 不读取视频流