迭代器,生成器

1. 使用while循环+异常处理+迭代器对象,完成for循环迭代取值的功能

 l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]

# 1.先将列表用__iter__转换为可迭代对象
inte_l1 = l1.__iter__()
# 2.while循环让迭代器对象反复执行__next__()操作
while True:
    try:
        print(inte_l1.__next__())
    except StopIteration as e:
        break

 

2. 自定义生成器对标range功能(一个参数 两个参数 三个参数 迭代器对象)

for i in range(1, 10):
    print(i)

(1)两个参数的

def my_range(start_num,end_num):
    while start_num < end_num:
        yield start_num
        start_num += 1

res = my_range(1,10).__iter__()
while True:
    try:
        print(res.__next__())
    except StopIteration:
        break

(2)一个参数的

def my_range(start_num, end_num=None):
    # 判断end_num是否有值,没有值说明用户只给了一个值,起始数字应该是0,终止位置应该是传的值
    if not end_num:
        end_num = start_num
        start_num = 0

    while start_num < end_num:
        yield start_num
        start_num += 1
for i in my_range(10):
    print(i)

(3)三个参数的

def my_range(start_num, end_num=None, step=2):
    # 判断end_num是否有值,没有值说明用户只给了一个值,起始数字应该是0,终止位置应该是传的值
    if not end_num:
        end_num = start_num
        start_num = 0

    while start_num < end_num:
        yield start_num
        start_num += step

for i in my_range(10):
    print(i)

 

posted @ 2023-01-17 20:42  莫~慌  阅读(21)  评论(0)    收藏  举报