[英]python recursive generator fail
我有嵌套的json對象,它包含列表和字典..我想在其中搜索所有“ foo”鍵。 我正在嘗試做遞歸生成器,但是在第二次調用parn dunno時函數失敗,為什么,我什至只看到一次“ in”輸出。 好像解釋器第二次沒有進入內部解析等等。幫助我了解我錯了嗎?
def parse(d,key):
print('in')
if type(d)==type({}):
if key in d:
yield d[key]
for k in d:
parse(d[k],key)
if type(d)==type([]):
for i in d:
parse(i,key)
生成器不太像協程那樣工作。 如果生成器函數遞歸調用自身,則遞歸調用將生成另一個生成器對象。 控制不會像Lua這樣重新輸入生成器代碼,並且yield
不會立即掛起整個生成器調用堆棧。 您必須遍歷返回的生成器對象並產生其元素:
def parse(d,key):
print('in')
if type(d)==type({}):
if key in d:
yield d[key]
for k in d:
for item in parse(d[k],key):
yield item
if type(d)==type([]):
for i in d:
for item in parse(i,key):
yield item
在Python 3.3中,添加了yield from
委派給子生成器的語法yield from
,因此代碼將減少為以下內容:
def parse(d,key):
print('in')
if type(d)==type({}):
if key in d:
yield d[key]
for k in d:
yield from parse(d[k],key)
if type(d)==type([]):
for i in d:
yield from parse(i,key)
這具有自動處理send
, throw
和一堆邊緣情況的優點,這些情況在子生成器上沒有顯式循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.