python三大器,Python 入门之 Python三大器 之 生成器

news/2024/12/22 15:09:58/

Python 入门之 Python三大器 之 生成器

1、生成器

(1)什么是生成器?

核心:生成器的本质就是一个迭代器

迭代器是Python自带的

生成器程序员自己写的一种迭代器

def func():

print("这是一个函数")

return "函数"

func()

def func():

print("这是一个生成器")

yield "生成器"

(2)生成器的编写方式:

<1> 基于函数编写

<2> 推导式编写

(3)生成器函数:

​ 通过生成器函数构建生成器

<1> 函数体中出现yield代表要声明一个生成器 (generator -- 生成器)

<2> 一个yield 对应 一个 next()

def func():

msg = input("请输入内容")

yield msg

print("这是第二次启动")

yield "生成器2"

yield "生成器3"

yield "生成器4"

g = func()

print(next(g))

print(next(g))

print(next(g))

print(next(g))

# 生成器的本质就是迭代器.迭代器如何取值,生成器就如何取值

<3>yield 和 return 的区别:

1>相同点:

都是返回内容

都可以返回多个,但是return写多个只会执行一个

2>不同点:

return终止函数 yield是暂停生成器

yield 能够记录当前执行位置

(4)生成器的作用:节省空间

(5)使用场景:

当文件或容器中数据量较大时,建议使用生成器

(6)区别什么是迭代器,什么是生成器?

<1> 通过地址:

​ 迭代器的地址:

​ 生成器的地址:

<2> 通过send()方法: (send()方法第一次必须发送None)

没有send()方法就是迭代器

有send()方法就是生成器

def func():

a = yield 1

print(a)

b = yield 2

print(b)

g = func()

print(g.send(None)) # send -- 发送

print(g.send("alex")) # send -- 发送

print(g.send("宝元")) # send -- 发送

1>send和next()区别:

​ 相同点:

​ send 和 next()都可以让生成器对应的yield向下执行一次。

​ 都可以获取到yield生成的值。

​ 不同点:

​ 第一次获取yield值只能用next不能用send(可以用send(None))。

​ send可以给上一个yield置传递值。

(7)yield 和 yield from的区别:

yield 将可迭代对象一次性返回

yield from 将可迭代对象逐个返回

def func():

def foo():

print(11)

lst = {"key":1,"key1":2}

yield foo

print(func().__next__())

def func():

lst = [1,2,3,45,6]

lst1 = ["alex","wusir","taibi","baoyuan"]

yield from lst

yield from lst1

g = func()

for i in g:

print(i)

lst = [1,2,3,45,6]

lst1 = ["alex","wusir","taibi","baoyuan"]

for i in lst,lst1:

print(i)

(8)可迭代对象、迭代器、生成器的比较:

可迭代对象

​ 优点:list , tuple .str 节省时间,取值方便,使用灵活(具有自己私有方法)

​ 缺点:大量消耗内存

迭代器

​ 优点:节省空间

​ 缺点:不能直接查看值,使用不灵活,消耗时间,一次性,不可逆行

生成器

​ 优点:节省空间,人为定义

​ 缺点:不能直接查看值,消耗时间,一次性,不可逆行


http://www.ppmy.cn/news/450681.html

相关文章

java三大器

拦截器&#xff1a;利用反射的机制实现&#xff0c;针对action、日志、未登录用户。 4.1&#xff0c;拦截器是基于java反射机制来实现的&#xff0c;而过滤器是基于函数回调来实现的。&#xff08;有人说&#xff0c;拦截器是基于动态代理来实现的&#xff09; 4.2&#xff0…

java 三大器

过滤器&#xff08;Filter&#xff09; 所谓过滤器顾名思义是用来过滤的&#xff0c;Java的过滤器能够为我们提供系统级别的过滤&#xff0c;也就是说&#xff0c;能过滤所有的web请求&#xff0c;这一点&#xff0c;是拦截器无法做到的。在Java Web中&#xff0c;你传入的requ…

python三大器_Python - 三大器 迭代器,生层器,装饰器

Python - 三大器 迭代器,生层器,装饰器 在介绍三大器之前先来了解一下容器和可迭代对象... 一. 容器 容器是一种把多个元素组织在一起的数据结构&#xff0c;容器中的元素可以逐个地迭代获取&#xff0c;可以用in, not in关键字判断元素是否包含在容器中。通常这类数据结构把所…

Spring三大器

Spring三大器 监听器listener Servlet的监听器Listener&#xff0c;它主要作用是随着web应用的启动而启动&#xff0c;只初始化一次&#xff0c;随着web的停止而销毁。 主要工作是&#xff1a;进行一些初始化的工作&#xff0c;例如参数或者固定一些固定对象 Spring boot框架自…

四大器

四大器 目录 一、迭代器 1.迭代协议2.一个简单的迭代器&#xff1a;3.迭代异常处理&#xff08;迭代完了&#xff0c;没有了,try&#xff09;二、生成器 yield与return的区别&#xff1a;三、装饰器 1.无参模板&#xff08;二层&#xff09;2.有参模板&#xff08;三层&#xf…

python三大,Python三大器

迭代器、天生器、装饰器 一、装饰器 1、函数工具&#xff1a;可以把函数名(不带括号)当成变量去用&#xff0c;关联的值是该函数的内存地址 2、闭包函数作用域函数嵌套函数工具 焦点点&#xff1a;内部函数传参的关系查找是以界说阶段为准 3、什么是闭包函数&#xff1f; 闭包是…

python三大器

迭代器 1.1、判断可迭代对象 from collections import Iterable # 判断对象是否是可迭代对象 result isinstance(X, Iterable) print("X是否是可迭代对象:", result) # >> X是否是可迭代对象: True1.2、自定义迭代器 自定义迭代器对象&#xff1a; 在类里面提…

python 三大器

python 三大器 迭代器: 有__iter__()和__next__()方法生成器&#xff1a;函数中将return换成yield装饰器&#xff1a;闭包的本质 迭代器 遇到问题没人解答&#xff1f;小编创建了一个Python学习交流QQ群&#xff1a;579817333 寻找有志同道合的小伙伴&#xff0c;互帮互助,群…