我需要通过API进行分页,并且正在创建URL。
URL看起来像这样:
/search/officers?q=XXXXX&items_per_page=50&start_index={}
返回的JSON中允许的每页最大项目为50,并且基于我需要更改start_index={}
字符串的页面数。
我用总结果数除以每页的最大项目数来计算我需要执行的分页数。
pages = 355
count_by_n = 50
for i in range(pages+1):
if i is 0:
print("start_index={}".format(i))
else:
global count_by_n
count_by_n += 50
print(str("start_index={}".format(str(count_by_n + 1))))`
产生:
start_index=0
start_index=101
start_index=151
start_index=201
start_index=251
start_index=301
start_index=351
start_index=401
<>:7: SyntaxWarning: name 'count_by_n' is assigned to before global declaration
从技术上讲,这是我想要的结果,但我想知道是否有一种方法可以解决该消息,并可能通过递归来解决此问题。
答案 0 :(得分:3)
是的,您可以在范围内指定start
(包括),stop
(不包括)和step
,因此可以这样写:
pages = 123
count_by_n = 50
for i in range(1, 50*pages + 1, 50):
print('start_index={}'.format(i))
然后产生:
>>> pages = 355
>>> for i in range(1, 50*pages + 1, 50):
... print('start_index={}'.format(i))
...
start_index=1
start_index=51
start_index=101
start_index=151
start_index=201
start_index=251
start_index=301
答案 1 :(得分:1)
您已经计算了分页,恕我直言,最简单的解决方案是简单地遍历该范围并打印50*i + 1
:
pages = 355
for i in range(pages):
print(f'start_index={50*i+1}')
# start_index=1
# start_index=51
# start_index=101
# ...
# start_index=17601
# start_index=17651
# start_index=17701
如果您不是要事先计算页面数,因为您想基于网址n
进行循环,我建议您做< / p>
n = 17710
for i in range(0, n, 50):
print(f'start_index={i+1}')
为了便于阅读。
答案 2 :(得分:1)
SyntaxWarning
的出现是因为global count_by_n
在for循环中被多次评估,更重要的是,已经为变量分配了值。为了摆脱警告,您应该每个变量仅使用global
关键字一次(因此在for循环之外),并且在分配值之前,例如:
pages = 123
global count_by_n
count_by_n = 50
for i in range(pages+1):
if i is 0:
print("start_index={}".format(i))
else:
count_by_n += 50
print(str("start_index={}".format(str(count_by_n + 1))))