知行编程网知行编程网  2022-10-09 18:00 知行编程网 隐藏边栏  1 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python的生成器是什么的相关知识,包括python读取csv文件的某一列数据,以及生成器怎么转化成列表这些编程知识,希望对大家有参考作用。

python的生成器是什么


什么是生成器

在Python中,一边循环一边计算的机制,称为生成器:generator。

python学习网,大量的免费
,欢迎在线学习!

普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

最简单的生成器函数:

>>> def func(n):
...     yield n*2
...
>>> func
<function func at 0x00000000029F6EB8>
>>> g = func(5)
>>> g
<generator object func at 0x0000000002908630>
>>>

func 是一个生成器函数,调用该函数时返回的对象是生成器 g 。该生成器对象的行为与迭代器的行为非常相似,可用于 for 循环等场景。注意yield对应的值不会在函数调用时立即返回,而是只有在调用next方法时才会返回(本质上for循环也调用了next方法)

>>> g = func(5)
>>> next(g)
10
>>> g = func(5)
>>> for i in g:
...     print(i)
...
10

那么为什么要使用生成器呢?显然,使用生成器在力方面比迭代器高几个级别,它的代码更少冗长,并且在性能上同样高效,为什么不使用它呢?让我们看看使用生成器实现斐波那契数列是多么容易。

def fib(n):
    prev, curr = 0, 1
    while n > 0:
        n -= 1
        yield curr
        prev, curr = curr, curr + prev
print([i for i in fib(10)])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

生成器表达式

列表推导在上一篇文章《这样写代码更优雅》中有介绍。生成器表达式与列表推导非常相似,但两者返回的对象不同。前者返回生成的Handler对象,后者返回列表对象。

>>> g = (x*2 for x in range(10))
>>> type(g)
<type 'generator'>
>>> l = [x*2 for x in range(10)]
>>> type(l)
<type 'list'>

生成器的优点前面已经介绍过了,就是在对海量数据进行迭代时,生成器显然更适合。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享