我正在創建一個尋呼機,該尋呼機從python-couchdb的Apache CouchDB映射函數返回文檔。這個生成器表達式運行良好,直到達到最大遞歸深度。如何才能改進以迭代,而不是遞歸?python-couchdb尋呼機觸發遞歸深度限制
def page(db, view_name, limit, include_docs=True, **opts):
"""
`page` goes returns all documents of CouchDB map functions. It accepts
all options that `couchdb.Database.view` does, however `include_docs`
should be omitted, because this will interfere with things.
>>> import couchdb
>>> db = couchdb.Server()['database']
>>> for doc in page(db, '_all_docs', 100):
>>> doc
#etc etc
>>> del db['database']
Notes on implementation:
- `last_doc` is assigned on every loop, because there doesn't seem to
be an easy way to know if something is the last item in the iteration.
"""
last_doc = None
for row in db.view(view_name,
limit=limit+1,
include_docs=include_docs,
**opts):
last_doc = row.key, row.id
yield row.doc
if last_doc:
for doc in page(db, view_name, limit,
inc_docs=inc_docs,
startkey=last_doc[0],
startkey_docid=last_doc[1]):
yield doc
我看不懂這段代碼。我不是PEP8鸚鵡的粉絲,但請至少使用* 4空格縮進。 – 2010-09-29 23:55:02
這並沒有真正回答這個問題,但有用的說明是,您可以通過使用'sys.setrecursionlimit()' – 2010-09-30 00:15:48
來更改最大遞歸深度。感謝@Rafe,我知道,但是因爲我返回了幾十萬行,我不想殺死電腦。 – 2010-09-30 00:26:04