学习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...自然是空列表啦 。 哈 。 哈。 哈

 

posted @   Cong0ks  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示