广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python生成器
  • 786
分享到

python生成器

生成器python 2023-01-31 00:01:51 786人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

所属网站分类: Python基础 > 装饰器,迭代器,生成器 作者:慧雅 原文链接: Http://www.pythonheidong.com/blog/article/20/ 来源:Python黑洞网 www.python

所属网站分类: Python基础 > 装饰器,迭代器,生成器


作者:慧雅

原文链接: Http://www.pythonheidong.com/blog/article/20/

来源:Python黑洞网 www.pythonheidong.com

首先让我们了解迭代器。根据Wikipedia,迭代器是一个对象,它使程序员能够遍历容器,特别是列表。但是,迭代器执行遍历并允许访问容器中的数据元素,但不执行迭代。你可能会感到困惑,所以让我们慢一点。有三个部分:

  • 可迭代
  • 迭代器
  • 迭代

所有这些部分都相互关联。我们将逐一讨论它们,然后讨论生成器。

可迭代

Python中的任何对象都有一个__iter__或一个__getitem__定义的 方法,它返回一个迭代器,简而言之,iterable是任何可以为我们提供迭代器的对象。什么是迭代器?

迭代器

Python中的只要定义了next(Python2)或 __next__方发就是一个迭代器。现在让我们理解迭代。

迭代

简单来说,它是从例如列表中获取元素的过程。当我们使用循环来循环某对象时,它被称为迭代。它是流程本身的名称。现在我们对这些术语有了基本的了解,让我们了解生成器。

 

生成器

生成器是迭代器,但您只能迭代它们一次。这是因为它们不会将所有值存储在内存中,它们会动态生成值。您可以通过迭代它们来使用它们,或者使用'for'循环,或者将它们传递给任何迭代的函数或构造。大多数时候generators都是作为函数实现的。这是一个generator函数的简单示例:

 

def generator_function():
    for i in range(10):
        yield i

for item in generator_function():
    print(item)

# Output: 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

在这种情况下,它并没有真正有用。生成器最适合计算大量结果(特别是涉及循环本身的计算),您不希望同时为所有结果分配内存。lists在Python 2 中返回的许多标准库函数 已在Python 3中被修改为generators返回,因为generators需要的资源更少。

这是一个generator计算斐波纳契数的例子:

 

# generator version
def fibon(n):
    a = b = 1
    for i in range(n):
        yield a
        a, b = b, a + b
现在我们可以像这样使用它:

 

 

for x in fibon(1000000):
    print(x)
这样我们就不必担心使用大量资源了。但是,如果我们这样实现它:

 

 

def fibon(n):
    a = b = 1
    result = []
    for i in range(n):
        result.append(a)
        a, b = b, a + b
    return result
在计算大量输入时,它会耗尽我们所有的资源。我们已经讨论过,我们只能迭代generators一次,但我们还没有测试过。在测试之前,您需要了解Python的另外一个内置函数next()。它允许我们访问序列的下一个元素。让我们测试一下:

 

 

def generator_function():
    for i in range(3):
        yield i

gen = generator_function()
print(next(gen))
# Output: 0
print(next(gen))
# Output: 1
print(next(gen))
# Output: 2
print(next(gen))
# Output: Traceback (most recent call last):
#            File "<stdin>", line 1, in <module>
#         StopIteration
我们可以看到,在取出所有值之后next()会导致 StopIteration错误。基本上这个错误告诉我们所有的值都已被取出了。您可能想知道为什么我们在使用for循环时不会出现此错误?答案很简单, for循环自动捕获这个错误并停止 next。您是否知道Python中的一些内置数据类型也支持迭代?让我们来看看:

 

 

my_string = "Yasoob"
next(my_string)
# Output: Traceback (most recent call last):
#      File "<stdin>", line 1, in <module>
#    TypeError: str object is not an iterator
那不是我们所期望的。str不是迭代器。嗯,这是对的!它是可迭代的但不是迭代器。这意味着它支持迭代但我们不能直接迭代它。那么我们如何迭代呢?现在是时候学习一个内置函数了iter。虽然 int不是可迭代的,但我们可以在字符串上使用它!

 

int_var = 1779
iter(int_var)
# Output: Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: 'int' object is not iterable
# This is because int is not iterable

my_string = "Yasoob"
my_iter = iter(my_string)
print(next(my_iter))
# Output: 'Y'
现在好多了。我相信你喜欢学习生成器。请记住,只有在使用它时才能完全掌握这个概念。确保您遵循此模式,并在它们对您有意义时使用 。你不会失望的!

 

 

 

--结束END--

本文标题: python生成器

本文链接: https://www.lsjlt.com/news/182445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python列表生成器与生成器
    列表生成器是python内置的非常简单却非常强大的。生成一个列表[1,2,3,4]可以用list(range(1,5))列表生成器的应用如果上面的公式加上判断,就可以筛选出想要的结果,比如仅需要偶数的平方使用多层循环生成器生成器与列表生成器...
    99+
    2023-01-31
    生成器 列表 python
  • python生成器
    所属网站分类: python基础 > 装饰器,迭代器,生成器 作者:慧雅 原文链接: http://www.pythonheidong.com/blog/article/20/ 来源:python黑洞网 www.python...
    99+
    2023-01-31
    生成器 python
  • python 生成器
    先来讲一个列表生成式列表生成式:就是一个用来生成列表的特定语法形式的表达式。基础语法格式[exp for iter_var in iterable]普通创建列表是这样的a = [1...
    99+
    2023-01-30
    生成器 python
  • Python---生成器
    # 生成器 # 通过列表生成式,我们可以直接创建一个列表 # 但是,受到内存限制,列表容量肯定是有限的 # 创建一个100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了 #...
    99+
    2023-01-31
    生成器 Python
  • Python:生成器
        生成器是Python中的一个高级用法,有段时间我对生成器的理解颇为费劲,直到我看到一句话“yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行”后,让我恍然大悟,这是生成器中的状态挂起,这句话让我想起...
    99+
    2023-01-31
    生成器 Python
  • Python生成器/生成器函数/推导式/
    1. 生成器   生成器的本质就是迭代器   在python中有三种⽅方式来获取⽣生成器:     1. 通过生成器函数     2. 通过各种推导式来实现⽣成器     3. 通过数据的转换也可以获取生成...
    99+
    2023-01-31
    生成器 函数 Python
  • Python 生成器 generator
    前提条件: 如果函数含有yield就是生成器,执行过程中遇到yield就跳出。 举例:def gen():for i in range(10):x = yield iprint(x)g=ge()print(g.send(None)))pri...
    99+
    2023-01-31
    生成器 Python generator
  • Python生成器和基于生成器的协程
    小编给大家分享一下Python生成器和基于生成器的协程,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是生成器Generator生成器就是可以生成值的函数2.当一个函数里有了 yield关键字就成了生成器3.生成器可...
    99+
    2023-06-15
  • python 生成器&迭代器
      一、生成器 1、列表生成器:列表生成式就像是一个厨师,他只会做这n(n为任意整数)道菜,想吃甚麽做甚麽,不吃不做,不浪费空间;而列表表达式就相当于已经做好的n盘菜,占用空间。2、生成器的创建方法: s = (x*2 for x in...
    99+
    2023-01-30
    生成器 迭代 python
  • Python之yield生成器
    1、对比range和xrange的区别:>>> print range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print xrange(10) xrange(10)...
    99+
    2023-01-31
    生成器 Python yield
  • 【25】Python生成器generat
    列表生成式一个小题目:将里列表[0,1,2,3]里面的数值都加1.方法1: a=[0,1,2,3] b=[] for i in range(len(a)): b.append(i+1) a=b print(a) 方法2: a = [...
    99+
    2023-01-31
    生成器 Python generat
  • python -- 密码生成器
    小Q:中庭地白树栖鸦,冷露无声湿桂花;今夜月明人尽望,不知秋思落谁家? 王建《十五夜望月》两个密码生成代码实例=============================================================#!/u...
    99+
    2023-01-31
    生成器 密码 python
  • Python中的生成器
    目录1.列表生成式2.生成器1.列表生成式 代码演示: # 列表生成式 list_1 = [x**2 for x in range(10)] # x**2处也可以放函数 pri...
    99+
    2022-11-12
  • 详解Python生成器和基于生成器的协程
    目录一、什么是生成器二、基于生成器的协程三、协程的注意点四、协程装饰器五、python3原生协程一、什么是生成器 Generator 1.生成器就是可以生成值的函数 2.当一个函数里...
    99+
    2022-11-12
  • python迭代器和生成器
    1.经典迭代器 import re RE_WORD = re.compile('\w+') class Sentence: def __init__(self, text): self.text = te...
    99+
    2023-01-30
    生成器 迭代 python
  • Python迭代器与生成器
    生成器仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得。创建一个生成器函数>>> def scq(): ...    print("11") # 当函数代码块中遇到yield关键字的时候,这个函数就是...
    99+
    2023-01-31
    生成器 迭代 Python
  • python中的生成器(generator)
    一、生成器 生成器是 Python 中非常有用的一种数据类型,它可以让你在 Python 中更加高效地处理大量数据。生成器可以让你一次生成一个值,而不是一次生成一个序列,这样可以节省内存并提高性能 二、实现generator的两种方式 py...
    99+
    2023-09-18
    python 前端 linux
  • python进阶之生成器
    迭代器   什么叫迭代     可以被for循环的就说明他们是可迭代的,比如:字符串,列表,字典,元祖,们都可以for循环获取里面的数据   下面我们看一个代码:   1 number = 12345 2 for i in number...
    99+
    2023-01-30
    进阶 生成器 python
  • Python生成器的用法
    这篇文章主要讲解了“Python生成器的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python生成器的用法”吧!一、生成器在 Python 中,使用了 yield 的函数被称为生成器...
    99+
    2023-06-02
  • python高级-生成器(17)
    1. 什么是⽣成器 通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占⽤的空间都⽩⽩浪...
    99+
    2023-01-31
    生成器 高级 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作