[英]Is a generator the callable? Which is the generator?
生成器只是一个函数,它返回一个可以在其上调用的对象,这样每次调用它都会返回一些值,直到它引发一个StopIteration异常,表示已生成所有值。 这样的对象称为迭代器。
>>> def myGen(n):
... yield n
... yield n + 1
...
>>> g = myGen(6)
我从Python中理解生成器中引用了这个?
这是我想弄清楚的:
哪个是发电机? myGen
或myGen(6)
?
根据上面提到的报价,我认为发电机应该是myGen
。 而myGen(6)
是返回的迭代器对象。 但我真的不确定。
当我尝试这个时:
>>> type(myGen) <type 'function'> >>> type(g) # <1>this is confusing me. <type 'generator'> >>> callable(g) # <2> g is not callable. False >>> callable(myGen) True >>> g is iter(g) # <3> so g should an iterable and an iterator True # at the same time. And it will be passed as an argument >>> for i in g: # to built-in function `next()` in a "for...in..." loop. print i # (is that correct?) 6 7
因此,根据<1>
和<2>
, g
的类型是'generator',它不可调用。 但是生成器是可调用的,调用生成器会获得一个迭代器对象这里发生了什么?
当我在寻找答案时,我会遇到每次定义函数时python都会创建一个可调用对象。
那么,我可以这样说吗? 当定义函数myGen
时, myGen
是一个引用可调用对象的名称,该对象是具有__call__
方法的类的实例 。 在这种情况下, myGen
是一个生成器, myGen(6)
是调用myGen
时返回的迭代器。
但是为什么type(g)
返回<type 'generator'>
呢? 这个返回的iterator
对我来说也很可疑,因为函数中没有return
语句。
1) myGen
是一个函数,当被调用时返回一个生成器对象 - 所以是的, myGen(6)
是一个生成器对象。
2)生成器提供__iter__
和next()
: docs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.