鱼C论坛

 找回密码
 立即注册
查看: 1602|回复: 1

[技术交流] Python 实现 itertools.islice

[复制链接]
发表于 2020-4-10 08:30:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 永恒的蓝色梦想 于 2020-4-11 09:44 编辑
  1. class islice:
  2.     def __init__(self,iterable,start=None,stop=None,step=None,/):
  3.         if step is None:
  4.             step=1
  5.         elif not isinstance(step,int) or step<=0:
  6.             raise ValueError("Step argument for islice() must be None or a positive integer")

  7.         if stop is None:
  8.             stop,start=start,stop

  9.         if start is None:
  10.             start=0
  11.         elif not isinstance(start,int) or start<0:
  12.             raise ValueError("Start argument for islice() must be None or a non-negative integer")

  13.         if stop is None:
  14.             self.__b=None
  15.         elif isinstance(stop,int)and stop>=0:
  16.             self.__b=((stop-start-1)//step+1) if start<stop else 0
  17.         else:
  18.             raise ValueError("Stop argument for islice() must be None or a non-negative integer")
  19.         
  20.         self.__c=step-1
  21.         self.__a=start
  22.         self.__it=iter(iterable)

  23.     def __iter__(self):
  24.         return self

  25.     def __next__(self):
  26.         if self.__b is None:
  27.             pass

  28.         elif self.__b:
  29.             self.__b-=1

  30.         else:
  31.             raise StopIteration

  32.         while self.__a:
  33.             self.__it.__next__()
  34.             self.__a-=1

  35.         self.__a=self.__c
  36.         return self.__it.__next__()
复制代码
如果代码有问题,欢迎在评论区指正!

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 10:07:20 From FishC Mobile | 显示全部楼层
这次的要好好看看了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表