首页 > 编程语言 >学习Python的笔记14--迭代器和生成器

学习Python的笔记14--迭代器和生成器

时间:2024-12-04 22:30:20浏览次数:8  
标签:14 迭代 Python 生成器 yield next print my

1.迭代器(Iterator)

概念:

迭代意味着重复多次,就像循环一样。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

迭代器只能往前不会后退。

1.iter():返回迭代器自身。

2.next():返回容器的下一个元素,如果没有元素了,抛StopIteration异常。也可以使用内置函数
next,next(it)和it.next()等效。

1、可迭代对象(Iterable)

可以被用作如for循环之中对象通常都是可迭代的。

其中一些包括:所有的序列类型,如:list,str,tuple。

集合类型,如:set,frozenset。

映射类型,如:dict。

文件对象和其他满足迭代协议的对象(即实现了iter方法或者getitem方法)

2、不可迭代对象

那些不支持迭代协议的对象都是非迭代对象,常见的有:数字类型:int,float ...

#[1.list]
#列表是可迭代的
my_list=[1,2,3]
for item in my_list:
    print(item)
'''
会依次打印1,2,3
'''
#[2.string]
#字符串也是可迭代的
my_string="hello"
for char in my_string:
    print(char)
'''
会依次打印'h','e','l','l','o'
'''
#[3.dict]
#字典是可迭代的,迭代的是它的键
my_dict={'a':1,'b':2}
for key in my_dict:
    print(key)
'''
#会依次打印'a','b'
'''
#[4.int]
#数字是非可迭代的
my_number=10
print(my_number.__iter__)#报错

#[5.float]
#浮点类型是非可迭代的
float_number=0.34
print(float_number.__iter__)#报错

2、生成器

1、概念:

Python中一种特殊类型的迭代器,本质上是可以记住执行位置的函数

生成器使用yield语句来生成一个值序列,不是一次性地产生一个完整的数据集并返回。

2、特点:

1.与迭代器类似,生成器也支持惰性计算,它们一次只生成一个项目

2.在每次产生输出之后,其状态会被挂起,直到下一次使用next()函数或for循环请求下一个值

3.当生成器函数执行完成时,或者遇到无法再产生新值的条件时,会抛出StopIteration异常

4.使用生成器函数定义生成器

5.生成器是通过在函数中使用yield关键字来定义的。

每当yield语句运行时,它会返回一个值,并在此时挂起函数的状态,包括局部变量、指针位置等。下一次调用时,它会从中断点继续执行

3、实例:

1、简单生成器函数

def count_up_to(max):
    count=1
while count<=max:
    yield count
    count+=1
#创建生成器
counter=count_up_to(5)
#使用next()获取值
print(next(counter))#输出1
print(next(counter))#输出2
#可以继续调用next()获取剩余的值,或者使用for循环
for number in counter:
    print(number)
#输出3 4 5
'''在这个示例中,生成器函数count_up_to接受参数max并计数到这个值。
每次yield被调用,它就会产生当前的计数值,
并在下一次调用时从上次离开的地方继续执行。'''

2、生成器表达式

#使用生成器表达式创建生成器
gen_exp=(x*x for x in range(4))
#使用for循环迭代生成器
for num in gen_exp:
    print(num)
#依次打印0,1,4,9
'''
生成器表达式看起来类似于列表推导,
但使用圆括号而不是方括号。
它们非常适合于简单
的场景,
其中一个完整的生成器函数可能显得过于冗长。'''

3、yield关键字

用于定义生成器函数中的一个位置,这里会产出(yield)一个值给调用者,并暂停函数的执行,直到下一次通过next()来请求另一个值。

当生成器函数中执行到一个yield表达式时,它会返回该表达式后面的值给生成器的调用者,并暂停执行(所有局部变量和状态都会被保留)。

yield的挂起的函数执行可以在下一次调用next()或迭代时继续从上次暂停的位置恢复。

def simple_generator():
    print("Stage1")
    yield 1

    print("Stage2")
    yield 2

    print("Stage3")
    yield 3
gen=simple_generator()
#每次调用next()时,生成器从上次暂停的地方开始,直到遇到下一个yield 
val=next(gen)
#输出"Stage1",返回1
val=next(gen)
#输出"Stage2",返回2

总结生成器的特点:

内存效率:可以用于无法放在内存中的大型数据集。

改善性能:惰性计算意味着只有在必要时才计算值,可以减少不必要的计算节省计算资源。

简洁性:使用生成器和生成器表达式,可以使代码更简洁易懂。

适用于管道处理:生成器可以被链式结合,用于构建复杂的数据管道。

标签:14,迭代,Python,生成器,yield,next,print,my
From: https://blog.csdn.net/Lorcian/article/details/144250559

相关文章

  • 学习Python的笔记10--函数进阶
    1、变量作用域定义:变量生效的范围,主要分为两类:局部变量和全局变量。1、局部变量定义:函数体内部的变量,只在函数体内部生效。deftestA():a=100print(a)testA()#100print(a)#报错:name'a'isnotdefined变量a是定义在testA函数内部的变量,在函数外部访问则立即报......
  • 学习Python的笔记11--函数加强
    1、 lambda表达式1、语法:lambda参数列表:表达式注意:1、lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。2、lambda表达式能接收任何数量的参数但只能返回一个表达式的值。3、直接打印lambda表达式,输出的是此lambda的内存地址#需求:函数返回值100#1.函......
  • 煮波的絮絮叨叨之Python篇
    晚上好啊贝贝们,今天聊点什么好呢既然每天都要学习新知识或者复习旧知识,那么就聊聊笔记好了。笔记对学习是很重要的,一个清晰明了的笔记不仅可以让你的心情变得愉悦,而且能让复习更加事半功倍。无偿推荐语雀 记笔记的软件,里面可以构建知识库,可以将你的各个内容分好类。今日......
  • python 数据类型和操作
    &转义要写成amp;<转义成<input默认转化为字符串是个文本,当需要计算时要转化为数字eg.x=input()​x=int或者更简单的x=int(input(""))布尔值,TRUEORFLASE​机器学习大任务:​回归是预测一个数​分类是给一个准确具体的数print(type(type(42......
  • task05&&01拓展:Python 条件判断和代码风格随笔
    在Python编程中,遵循良好的代码规范至关重要。一、空格使用规范•采用空格表示缩进,切勿使用制表符(Tab)。•语法相关的每一层缩进用4个空格表示。•每行字符数最好不超过79个。若表达式过长需多行显示,除首行外,其余行应在正常缩进基础上再增加4个空格。•函数和类定......
  • 物体检测(YOLO)示例:使用 Rust 调用 Python 进行物体检测
    在本示例中,我们将展示如何使用Rust调用Python脚本来完成YOLO物体检测任务。我们将通过Rust的std::process::Command调用Python脚本,并传递输入图像以进行检测。环境准备首先,您需要安装以下工具:更多内容访问ttocr.com或联系1436423940Rust语言:从Rust官网安装R......
  • 大数据学习记录,Python基础(5)
    模块类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,....自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlibinfo='12345......
  • python学习-condition
    条件判断1.三个关键词:ifelseelif(即为elseif)(1)if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else(2)当if后面的条件语句不满足时,与之相对应的else中的代码块将被执行。ifa==1:print('right')else:print('wro......
  • 大数据学习记录,Python基础(5)
    模块类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,…自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlibinfo='123456'#......
  • Python基础学习-14面向对象与类
    目录1、面向对象2、类3、基本语法和规范4、类的继承5、本节总结1、面向对象•对象:Object我们将生活中的业务场景抽象为对象类是对一类事物描述,是抽象的、概念上的定义:比如“人”对象是实际存在的该类事物的每个个体,因而也称实例(instance)。比如“张三”2、类......