2017-01-28 22 views
-1

爲什麼發電機沒有像__next__()那樣的'dunder'__send__()方法?爲什麼生成器沒有像`__next __()`那樣的'dunder'`__send __()`方法?

我認爲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

提供__next__和相應的內置next來調用它是有意義的,因爲迭代器協議是由Python中的許多對象支持和使用的。

使用.send幾乎只適用於我所知道的生成器,將它作爲一個dunder,然後創建一個內置的send函數來訪問該dunder只是不值得額外的麻煩。

相關問題