前言:很多接口是通过翻页获取数据,如何通过递归的方法获取翻页数据呢
以下用递归的方法获取TAPD缺陷数据:
def get_bus_from_project_v2(workspace_id, limit=200, page=1, re_data=[], **kwargs):
"""
通过递归方法翻页获取所有数据
:param workspace_id:
:param limit:
:param page:
:param re_data:
:param kwargs:
:return:
"""
url = 'https://api.tapd.cn/bugs'
data = dict(workspace_id=workspace_id, limit=limit, page=page, **kwargs)
res = self.s.get(url=url, params=data)
result = json.loads(res.text)
re_data = re_data + result['data']
if len(result['data']) < limit:
return re_data
else:
page = page + 1
return get_bus_from_project_v2(workspace_id=workspace_id, limit=limit, re_data=re_data, page=page,**kwargs)
最好不要在自己的程序中写递归函数,递归函数很难调试。
递归的缺点:
-
递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。
-
递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。
-
调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出
递归的优点:
- 简洁
- 在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多