学习Py——自己模拟写的一个Range功能
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: <---这个地方把值取空了,自然获得的list的结果是空列表了 - -||| 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()的时候会直接生成列表。而我做的这个“山寨”好像就返回的是空列表。(已解决)
原因就是,上面一个for循环把f的值取空了,下面在进行list...自然是空列表啦 。 哈 。 哈。 哈