python-生成器与迭代器

博客 分享
0 222
张三
张三 2023-03-06 18:26:25
悬赏:0 积分 收藏

python - 生成器与迭代器

2、生成器的用法

# 生成器的作用是节省空间,生成器就是迭代器的一种
# def index():
#     print('index')
#     yield 123   #yield后面如果没有加参数会打印none
#                 # #函数中如果存在yield关键字,在调用之前,还是一个普通的函数,一旦调用函数,就把函数变成的生成器(迭代器),生成器一定是迭代器,迭代器不一定是生成器,因为,迭代器不能用yield关键字
# res = index()#一旦服赋予变两此时这个index就是生成器
# ret = res.__next__()
# print(ret)


def index():
    print('index')
    yield 123
    print('阿道夫')
    yield 222
    print('drgd')

# yild关键字的用法
res = index()
ret = res.__next__()#代码遇到yield会停住,夯住
ret = res.__next__()#再次执行__next__()代码从上一次停住的位置继续往下执行,
yield实现range方法:两个参数
# def my_range(start, stop):  #1、 我们先定一一个函数这个函数my_range,这个函数里面肯定要有两个形参来接收my_range里面1和10的这两个参数,所以我用start,stop
#     while start < stop:  # 2、因为每次都要打印返回值所以这里我们使用while循环,7、因为while的条件是True所以一直不会结束 这个时候就需要给循环加条件start < stop,而stop对应的是10,所以到10就会结束
#         yield start  # 4、这里执行到yield的时候就会把1传给start
#         start += 1  # 6、但是我们执行后每一次都只打印这个1,所以这个时候我们需要加1,这个时候while循环第二次打印就会返回2
#
#
# for i in my_range(1, 10): #3、for的内部原理其实就是迭代器,既然是迭代器里面就一定会有__next__(),说一就会执行 yield
#     print(i)# 5、当我们代码碰到yield的时候会把返回值给到这个 i,这个时候在打印i的时候就会把 1 打印出来

yield 传值
def eat():
    print('开始吃饭')
    while True:
        food = yield #none
        print('开始吃%s' % food)
res = eat()#只是把函数变成了生成器
ret = res.__next__()#取值取到了第一次遇到了yield,然后停住
res.send('臭豆腐')#1、send调用了__next__() ,2、传参数,
yield与return
yield
    1、可以有返回值
    2、函数遇到yield不会结束,只会停住
    3、yield关键字把函数变成了生成器,支持迭代器去值了
return
    1、可以有返回值
    2、遇到return关键字直接结束函数运行
**生成器表达式**
l = [1, 2, 3, 4, 5, 6]
res = (i + 1 for i in l)#生成器
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())#234567,这就是生成器,
注意生成器如果执行__next__(),内部的代码不会执行
posted @ 2023-03-06 18:19  王献运  阅读(0)  评论(0编辑  收藏  举报
回帖
    张三

    张三 (王者 段位)

    921 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员