4
當我把yield
放在函數體中時,很明顯。但這不是我想問的。鑑於兩個簡單的功能於一身的交互式解釋:python如何知道何時返回一個生成器?
def myGenerator():
yield 42
def myFunction():
return 42
當我執行我都看到:
>>> myGenerator()
<generator object myGenerator at 0xb7bf511c>
>>> myFunction()
42
但如果檢查myGenerator
和myFunction
對象,我沒有看到任何真正的不同:
for attr in dir(myFunction):
print(attr, getattr(myFunction, attr)
產生的東西看起來與myGenerator
相同。函數對象的隱藏中是否隱藏了一些魔術位,解釋器是否分支以辨別是否將函數調用作爲生成器進行封裝?還是它做了更多的裝飾風格,其中yield關鍵字的存在使得像'myGenerator'
那樣綁定的對象被封裝在某些生成器魔術中?或者是其他東西...?
答案在這裏:http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained – manji