Python中生成器和迭代器的功能介绍

生成器和迭代器的功能介绍

1. 生成器(generator)

1. 赋值生成器

1. 创建

方法:x = (variable for variable in iterable)
例如:x = (i for i in range(10))
     print(x)
 >>> <generator object <genexpr> at 0x00000000006B85C8>
返回值:generator
#使用元祖推导式的时候回变成一个生成器。

2. 调用

方法:x.__next__()
返回值:object
#对应生成器一般使用该种方法调用,当然也可以通过for循环进行遍历。

2. 函数生成器

函数生成器也是常用的或者常说的生成器,顾名思义就是通过函数来创建的,不过在函数中一定需要使用yield关键字声明。

1. yield作为返回值

斐波那契数列:

  1. 常规函数实现

    例如:def fei(max_n):
             n,a,b = 0,0,1
             while n < max_n:
                 print(b)
                 a,b = b,a+b
                 n += 1
             return ‘game over‘
    #通过一个函数实现斐波那契数列。直接通过fei(num)调用即可打印出结果。
    
  2. 生成器实现
    例如:def fei(max_n):
             n,a,b = 0,0,1
             while n < max_n:
                 yield b
                 a,b = b,a+b
                 n += 1
             return ‘game over‘
    #通过一个生成器斐波那契数列。次数函数执行的结果则为一个生成器,因此调用时需要对函数的执行结果赋值给变量,然后通过__next__()方法进行调用。
    

2. yield作为接收值

单线程异步并行

例如:import time
     def consumer(name):
         print(‘%s来吃包子了!‘%name)
         while True:
             bao = yield
             print(‘包子%s被%s吃了!‘%(bao,name))
     def producer():
         zhang = consumer(‘zhangsan‘)
         li = consumer(‘lisi‘)
         zhang.__next__()
         li.__next__()
         print(‘包子已经在锅里了!‘)
         for i in range(1,6,2):
             j = i+1
             time.sleep(1)
             print(‘包子%s好了!‘%i)
             print(‘包子%s好了!‘%j)
             zhang.send(i)
             li.send(j)
     producer()
#把yield作为接收值,使用send方法把数据传递给yield来执行生成器。

2. 迭代器(iterator)

可以通过for循环的对象为可迭代对象,对于数据类型str、list、tuple、dict、set、generator都是可迭代对象,即iterable,其中generator可以使用next()方法进行调用的可迭代对象。对应迭代器的定义为:可以使用next()方法进行调用的可迭代对象即为迭代器。所以生成器就是迭代器的一种。对应上述其他数据类型则只是一个可迭代对象,而不是迭代器,但可以通过iter()方法可以将上述其他数据类型转换为一个迭代器。

时间: 2024-08-25 09:53:06

Python中生成器和迭代器的功能介绍的相关文章

python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延迟,是指在需要的时候才产生结果,而不是立即产生结果.这样在需要的时候才去调用结果,而不是将结果提前存储起来要节约内存.比如用列表的形式存放较大数据将会占用不少内存.这是生成器的主要好处.比如大数据中,使用生成器来调取数据结果而不是列表来处理数据,因为这样可以节约内存. 2.迭代到下一次的调用时,所使

python中生成器及迭代器

列表生成式 列表生成式是python内部用来创建list的一种方法,其格式形如: L = [x*8 for x in range(10)] print(L) 此时会得到结果:[0, 8, 16, 24, 32, 40, 48, 56, 64, 72].我们可以看到,用列表生成式,一句代码可以代替用函数循环,比较简洁. 生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面

Python中模块之random的功能介绍

random的功能介绍 random模块的方法如下: betavariate 获取一个range(0,1)之前的随机浮点数 方法:random.betavariate(alpha,beta) 返回值:float 例如:print(random.betavariate(3,4)) >>> 0.4179835782470355 #该方法需要两个参数都大于0才会执行,即两个参数类型需要是数值类型. choice 随机获取非空序列的元素 方法:random.choice(seq) 返回值:obj

python中生成器对象和return 还有循环的区别

python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因为return后面就不能跟任何东西,意味着函数的结束.那么我们完全可以这么做: def main(): for i in range(1,100): yield i 这样就等于生成了一个循环返回对象,特别在爬虫scrapy中较为常见!yeild和return还有for 上本质有什么区别呢?其实很简单

Python中生成器,迭代器,以及一些常用的内置函数.

知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 通过生成器推导式 python内置函数或者模块提供 生成器函数 yield:一个yield对应一个next,next超过yield数量,就会报错,与迭代器一样. yield与return的区别: return一般在函数中只设置一个,他的作用是终止函数,并传给函数的执行者返回值 yield在生成器中可

Python菜鸟之路:Python基础-生成器和迭代器

一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式.本质:迭代器就是生成一个有next()方法的对象,而不是通过索引来计数. 不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的

python的生成器与迭代器和可迭代对象

来简单的说下python中的生成器和可迭代对象以及迭代器的问题.只是简单地记录一下并不涉及太深入的内容. 首先来说一下什么是生成器,先看下面的代码: 1 #_*_ coding:utf-8 _*_ 2 3 result = (x for x in range(10)) 4 5 ''' 6 下面print的打印结果 7 <generator object <genexpr> at 0x0000026FA092B360> 8 ''' 9 print(result)  上面的这种代码其实

python中生成器

1.简介 通过列表生成式,我们可以直接创建一个列表,但是受到内存的限制,列表容量肯定是有限的. 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢? 在Python中,这种一边循环一边计算的机制,称为生成器:generator. 2.示例 2.1列表生成式的[]改成(),就创建了一个generator: 1 s = (x * x for x in range(5)) 2 print(s) # <generator object <genexpr> a

python数据分析之Pandas:基本功能介绍

Pandas有两个主要的数据结构:Series和DataFrame. Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签构成.来看下它的使用过程 In [1]: from pandas import Series,DataFrame In [2]: import pandas as pd In [3]: obj=Series([4,7,-5,3]) In [5]: obj Out[5]: 0    4 1    7 2   -5 3    3 dtype: int64