1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __author__ = "loki" 4 5 # function: Modeled range 6 from collections import Iterable, Iterator 7 8 9 class Range: 10 def __init__(self, start, stop, step=1): 11 self.num = start 12 self.stop = stop 13 self.jump = step 14 15 def __iter__(self): 16 return self 17 18 def __next__(self): 19 if self.num >= self.stop: 20 raise StopIteration 21 n = self.num 22 self.num += 1 23 if self.jump > 1: # step > 1 24 n = n * self.jump 25 if n <= self.stop: 26 return n 27 else: 28 raise StopIteration 29 return n # default step 30 31 32 f = Range(0, 12, 2) 33 f1 = range(0, 12, 2) 34 35 # print(isinstance(f, Iterable)) 36 # print(isinstance(f, Iterator)) 37 38 for item in f: 39 print(item) 40 41 print(type(f)) 42 print(list(f)) 43 print('---------分割线-------------') 44 print(type(f1)) 45 print(list(f1)) 46 47 print(dir(f)) 48 print(dir(f1))
遗留问题:
虽然,完成了 range(启始, 结束, 步进).但是,发现官方的range在执行list()的时候会直接生成列表。而我做的这个“山寨”好像就返回的是空列表。(待研究)