学习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:
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()的时候会直接生成列表。而我做的这个“山寨”好像就返回的是空列表。(待研究)

猜你喜欢

转载自www.cnblogs.com/Cong0ks/p/9103456.html