利用生成器的原理实现range函数的功能
# range() 三种玩法defmy_range():passfor i inrange(0,10):print(i)defmy_range(start, stop=None, step=1):ifnot stop:# 意味着只传了一个参数,stop没有值
stop = start
start =0while start < stop:yield start
start+=step
# print(my_range(0, 20))# for i in my_range(0, 20):# print(i)# for i in my_range(0, 20, 2):# print(i)for i in my_range(10):print(i)
列表生成式
res =[name for name in names_list]print(res)# 就是一个列表
res1 =(name for name in names_list)print(res1)
names_list =['kevin','jerry','tony','oscar']
res1 =(name for name in names_list)print(res1)# <generator object <genexpr> at 0x00000218F4569CF0>print(res1.__next__())print(res1.__next__())print(res1.__next__())print(res1.__next__())"""生成器表达式如果不使用数据,就不给你数据"""
把迭代器、生成器看成是一个工厂,什么时候需要数据工厂就给你加工数据
目的:就是为了节省内存空间
生成器笔试题
# 求和defadd(n, i):return n + i
# 调用之前是函数 调用之后是生成器deftest():for i inrange(4):yield i
g = test()# 初始化生成器对象for n in[1,10]:
g =(add(n, i)for i in g)
res =list(g)print(res)#A. res=[10,11,12,13]#B. res=[11,12,13,14]
C. res=[20,21,22,23]#D. res=[21,22,23,24]