我是靠谱客的博主 昏睡身影,最近开发中收集的这篇文章主要介绍python笔记 生成器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

python笔记 生成器

好记性不如烂笔头,学习从摘抄开始!

目录

    • 生成器格式1:借助列表推导式
    • 生成器格式2:借助函数完成
    • 生成器 控制 两个任务交替进行

1.通过列表生成式(列表推导式),我们可以直接创建一个 列表。但是,受到内存限制,列表容量肯定是有限的。
2.创建一个包含100万个元素的列表,不仅占用很大的存储空间,
3.如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费。
4.如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
5.这样就不必创建完整的list,从而节省大量的空间。
6.在Python中, 这种边循环一边j计算的机制,称为生成器: generator.

生成器格式1:借助列表推导式

格式:与列表推导式类似,将[]换成了()

<name> = (<表达式> for <变量> in <旧列表>)
<name> = (<表达式> for <变量> in <旧列表> if <条件>)
<name> = (<表达式1> if <条件> else <表达式2> for <变量> in <旧列表>)

注意:当生成的元素超出预设个数时,会抛出异常

例子:name.next() 一次生成一个元素

g = (i * 3 for i in range(30))
print(type(g))

ans = g.__next__()
print(ans)

ans = g.__next__()
print(ans)

ans = g.__next__()
print(ans)

结果:

<class 'generator'>
0
3
6

生成器格式2:借助函数完成

只要函数中出现关键字yield,说明函数变成了生成器
步骤:

1.定义一个函数,函数中使用关键字yield
2.调用函数,接收调用的结果
3.得到的结果就是生成器
4.借助 next(<生成器name>) <生成器name>.next()得到元素

例子1:g.next() 和 next() 一次生成一个元素

def func():
    n = 0
    while True:
        n = n + 1
        yield n  # yield 相当于return+暂停
        print('第{}测试:'.format(n), n)

g = func()
print(type(g))

ans = g.__next__()
print('接收到的返回值:', ans)

ans = g.__next__()
print('接收到的返回值:', ans)


ans = next(g)
print('接收到的返回值:', ans)

ans = next(g)
print('接收到的返回值:', ans)

结果:

<class 'generator'>
接收到的返回值: 11测试: 1
接收到的返回值: 22测试: 2
接收到的返回值: 33测试: 3
接收到的返回值: 4

例子2:name.send() 一次生成一个元素的同时并传入生成器一个参数
第一次调用.send(),必须传入None,

def func():
    n = 0
    while True:
        n = n + 1
        temp = yield n  # yield 相当于return+暂停 将 n 返回,并接受到的参数赋值给temp
        print('第{}测试:'.format(n), temp)


g = func()
print(type(g))

# 第一次调用<name>.send(),必须传入None
ans = g.send(None)
print('接收到的返回值', ans)

# 第二次调用 可以传入其他参数,先执行yield后面的语句,在循环执行到yield
ans = g.send("hello")
print('接收到的返回值', ans)

# 第三次调用 可以传入其他参数,先执行yield后面的语句,在循环执行到yield
ans = g.send("world")
print('接收到的返回值', ans)

结果:

<class 'generator'>
接收到的返回值 11测试: hello
接收到的返回值 22测试: world
接收到的返回值 3

生成器 控制 两个任务交替进行

例子:通过生成器控制两个任务交替进行

def task1():
    n=0
    while True:
        n=n+1
        print('任务1第{}次执行'.format(n))
        yield None

def task2():
    n = 0
    while True:
        n = n + 1
        print('任务2第{}次执行'.format(n))
        yield None

g1 = task1()
g2 = task2()

g1.__next__()
g2.__next__()

g1.__next__()
g2.__next__()

g1.__next__()
g2.__next__()

结果:

任务11次执行
任务21次执行

任务12次执行
任务22次执行

任务13次执行
任务23次执行

最后

以上就是昏睡身影为你收集整理的python笔记 生成器的全部内容,希望文章能够帮你解决python笔记 生成器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部