API 分页计算引擎(专业版)
输入
offset_calc(page,page_size);total_pages(total,page_size);has_next(page,total,page_size);cursor_slice(items,limit,cursor=0)
输出
偏移量;总页数;bool;(本页list,下一游标,has_next)
硬性规则
- page<1 或 page_size<1 抛 ValueError。
- total<0 或 page_size<1 总页数返回0,不除零。
- next_cursor=cursor+本页实际条数,has_next=next_cursor<len(items)。
示例
offset_calc(3,20) → 40
total_pages(95,20) → 5
cursor_slice(list(range(10)),3,0) → ([0,1,2],3,True)
Python 引擎(可独立运行)
# -*- coding: utf-8 -*-
import math
def offset_calc(page, page_size):
if page < 1 or page_size < 1:
raise ValueError("page>=1 且 page_size>=1")
return (page - 1) * page_size
def total_pages(total, page_size):
if total < 0 or page_size < 1:
return 0
return math.ceil(total / page_size)
def has_next(page, total, page_size):
return page < total_pages(total, page_size)
def cursor_slice(items, limit, cursor=0):
"""游标分页:返回(本页数据, 下一游标, 是否还有下一页)。"""
if limit < 1:
raise ValueError("limit>=1")
cursor = max(cursor, 0)
page = items[cursor:cursor + limit]
next_cursor = cursor + len(page)
return page, next_cursor, next_cursor < len(items)