python生成式、生成器和迭代器

简介:

列表生成式

生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))。需要生成[1x1, 2x2, 3x3, ..., 10x10]

循环:

for x in range(1, 11):

    L.append(x * x)

print(L)

但是循环太繁琐。

而列表生成式则可以用一行语句代替循环生成上面的list:

[x * x for x in range(1, 11)]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来。

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

[x * x for x in range(1, 11) if x % 2 == 0]

还可以使用两层循环,可以生成全排列:

[m + n for m in 'ABC' for n in 'XYZ']


生成器(generator)

生成器和生成式最大的区别就是将[]替换为()

输出可迭代对象generator需要使用next方法

例子1

a = (x*x for x in xrange(10) if x*x%2 == 0)

print(type(a))

print(a.next())

print(a.next())

for i in a:

print(i)

#generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素为止

例子2

def fib(n):

    sum = 0

    i = 0

    while(i<n):

        sum = sum +i

        i+=1

        yield sum

for x in fib(10):

print(x)

print(type(fib(10)))

#结果和上面的结果是一样的,包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。每当遇到yield关键字的时候,你可以理解成函数的return语句,yield后面的值,就是返回的值。但是不像一般的函数在return后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效,下次从yield下面的部分开始执行。


迭代器

Iterable(可迭代对象)  和  Iterator(迭代器) 主要区别是 :

凡是可以用 for 循环的 都是  Iterable(可迭代对象)   凡是需要通过next()函数获得值的可迭代对象都是 Iterator(迭代器)。 

(所以生成器可以 被next()函数调用并不断返回下一个值的对象称为迭代器 ) (可以简单理解为生成器 就是 迭代器的可迭代对象)

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;



本文转自 粗粮面包 51CTO博客,原文链接:http://blog.51cto.com/culiangmianbao/1978883,如需转载请自行联系原作者

相关文章
|
3天前
|
Python 容器
Python中迭代器的基本概念
【7月更文挑战第3天】
5 1
|
3天前
|
Python
Python中自定义迭代器
【7月更文挑战第3天】
6 1
|
3天前
|
Python
Python中创建迭代器
【7月更文挑战第3天】
5 1
|
5天前
|
Python
python解包迭代器或生成器
【7月更文挑战第1天】
12 3
|
4天前
|
大数据 数据处理 Python
Python的生成器(Generator)
【7月更文挑战第2天】
7 1
|
4天前
|
Python 容器
python 的迭代器(Iterator)
【7月更文挑战第2天】
6 1
|
5天前
|
Python
python解包迭代器或生成器
【7月更文挑战第1天】
8 1
|
2天前
|
缓存 测试技术 Python
python的装饰器是什么?有什么作用?迭代器和生成器的区别?
python的装饰器是什么?有什么作用?迭代器和生成器的区别?
|
3天前
|
大数据 程序员 Python
Python数据类型大变身!掌握列表推导式与生成器,编程效率翻倍不是梦
【7月更文挑战第2天】在Python中,列表推导式和生成器是提升效率的利器。列表推导式以简洁方式处理循环和条件,如将偶数平方化简为一行代码,提高代码可读性。生成器则按需生成数据,减少内存占用,适合处理大数据。通过`yield`函数实现惰性求值,有效避免内存溢出。掌握这两者,能优化Python编程体验。
|
3天前
|
存储 大数据 数据处理
逆天改命!生成器表达式让Python数据处理效率飙升,你还在等什么?
【7月更文挑战第2天】Python的生成器表达式是高效处理大数据的关键。它们惰性计算,按需生成值,节省内存,提升性能,尤其适合大规模数据集。通过简洁的语法,生成器表达式能轻松筛选、处理文件中的偶数等任务,避免内存溢出。掌握这一体现Python精髓的工具,将使你的代码更高效、更具可读性。立即开始使用生成器表达式,解锁数据处理新效能!**