为什么发电机没有“发电机”? `__send __()`方法如`__next __()`?

时间:2017-01-28 11:41:20

标签: python python-3.x generator

为什么发电机没有“发电机”?像__send__()这样的__next__()方法?

我认为send()next()函数类似。但是,正如您在下面的代码中看到的那样,与这些函数混合的代码在美学上并不对称。

g = some_generator()

next(g)
next(g)
g.send(some_value)
#send(g, some_value) # how about this? Is is weird? I'm wondering the reason.

为什么Python 3不提供__send__()代替generator.send()而不是__next__()

1 个答案:

答案 0 :(得分:1)

提供__next__和相应的内置next来调用它是有道理的,因为Python中的许多对象都支持并使用迭代器协议。

使用.send几乎只适用于我所知道的生成器,将其作为dunder然后创建一个内置的send函数来访问dunder就是不会值得额外的麻烦。