"""
使用python的迭代器和生成器模擬python內置的range函數
"""
def use_range():
"""python內置的range函數"""
for i in range(5, 10):
print(i)
class IterRange(object):
"""使用迭代器來模擬range()函數"""
def __init__(self, start, end):
"""通過構造函數傳範圍的值"""
self.start = start - 1
self.end = end
def __next__(self):
self.start += 1
if self.start >= self.end:
raise StopIteration
return self.start
def __iter__(self):
return self
class GenRange(object):
"""使用生成器模擬range函數"""
def __init__(self, start, end):
"""通過構造函數傳範圍的值"""
self.start = start - 1
self.end = end
def get_num(self):
"""
生成數
遇到yield程序會暫停執行,直到下次被喚醒,在執行一次
"""
while True:
if self.start >= self.end - 1:
break
self.start += 1
yield self.start
def get_num(start, end):
"""用函數的方式使用生成器實現range函數"""
start -= 1
while True:
if start >= end - 1:
break
start += 1
yield start
if __name__ == '__main__':
# 演示內置range函數
# use_range()
# 迭代器實現range用列表返回
iter_num = IterRange(5, 10)
# print(next(iter_num))
# print(next(iter_num))
# print(next(iter_num))
# print(next(iter_num))
# print(next(iter_num))
# 生成一個列表
l1 = list(iter_num)
print(l1)
print("-----------------")
# 生成器模擬range並返回列表
gen = GenRange(5, 10).get_num()
print(gen) # 返回一個對象
print(list(gen)) # 強制轉換成列表形式
print("-----------------")
gen_temp = get_num(5, 10)
print(gen) # 返回一個對象
print(list(gen_temp))
使用python的迭代器和生成器模擬python內置的range函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.