当前位置: 首页 > news >正文

python之装饰器、迭代器、生成器

装饰器

什么是装饰器?

用来装饰其他函数,即为其他函数添加特定功能的函数。

装饰器的两个基本原则:

装饰器不能修改被装饰函数的源码

装饰器不能修改被装饰函数的调用方式

什么是可迭代对象?

在python的任意对象中,只要它定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象,通俗低讲就是可以通过for循环进行遍历。

如何判断一个对象是否是可迭代对象?

方法一:isinstance+iterable

方法二:hasattr+__getitem__

from collections import Iterableclass Student:pass
print(isinstance([],Iterable)) #True
print(isinstance(Student(),Iterable)) #Falseprint(hasattr([],'__getitem__')) #True
print(hasattr(Student(),'__getitem__'))  #False

什么是迭代器?

迭代器就是实现了__next____iter__方法(缺一不可)的对象,就叫迭代器。

其实__iter__方法返回迭代器自身,__next__方法不断返回迭代器中的下一个值,直到容器中没有更多的元素时则抛出Stoplteration异常,以终止迭代。

为什么有了可迭代对象,还要有迭代器呢?

工厂模式(需要什么数据就生成什么数据),节约内存空间

from itertools import countcounter = count(start=10)
print(type(counter))
print(dir(counter))
print(next(counter))
print(next(counter))
for i in range(100):print(next(counter))
print(len(counter))    #报错,迭代器没有len属性print(isinstance(counter,Iterator))  #True
print(isinstance([],Iterator))   # False
a= [1,2,3,45,6]
#将a这个可选代对象转变为选代器对象
a_iter = iter(a)
print(type(a_iter))print(len(a_iter))  #报错,没有len属性
print(next(a_iter))
print(next(a_iter))
for item in a iter:print(item)
for item in a_iter:print(item)
for item in a:print(item)
# print(next(a iter)) #报错

生成器中yield关键字的作用?

1.程序每次在代码中遇到yield关键字后,会返回结果

2.保留当前函数的运行状态,等待下一次调用,下次调用时从上一次返回yield的语句处开始执行后面的语句

生成器是一种特殊的迭代器

def demo():print('hello')t=yield 5 # returnprint('world')print(t)def demo1():print('hello')return 5
print(type(demo()))
print(dir(demo()))c = demo() #没有执行生成器函数 这行代码没有输出代表没有执行生成器函数a = demol() #普通函数,在调用时直接执行 这行代码执行输出的结果是'hello'
print(next(c)) #预激活生成器  这行代码执行输出的是'hello''5'print(c.send(None))
c.spend('test') #send方法调用生成器并且把test字符串传入到生成器内部

def demo():print('hello')t=yield5 #returnprint('world')print(t)
def demo1():print('hello')return 5print(type(demo()))
print(dir(demo()))c=demo() #没有执行生成器函数 这个步骤的时候没有执行生成器!!!
a=demo1() #普通函数,在调用时直接执行
print(next(c))# 预激活生成器
# 这个步骤执行生成器了!!!yield是执行一次先返回结果,下一次保留之前的状态,然后执行yield后的代码
print(c.send(None))
c.send('test') # send方法调用生成器并且把test字符串传入到生成器内部 

相关文章:

python之装饰器、迭代器、生成器

装饰器 什么是装饰器? 用来装饰其他函数,即为其他函数添加特定功能的函数。 装饰器的两个基本原则: 装饰器不能修改被装饰函数的源码 装饰器不能修改被装饰函数的调用方式 什么是可迭代对象? 在python的任意对象中&#xff…...

Go语言实现后台管理系统如何根据角色来动态显示栏目

实现要点 根据不同的用户显示不同的栏目是后台管理的重要内容,那么如何实现这些功能呢? 栏目有很多分级这些需要递归查出来新增和删除也要满足层级规则且不影响其他层级各节点之间的关系因该明确,方便添加和删除数据库设置 存储栏目的数据库设计,要明确节点的关系最常用的…...

【深度学习】【TensorRT】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【TensorRT】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转engineWindows平台搭…...

LeetCode(Python)-贪心算法

文章目录 买卖股票的最佳时机问题穷举解法贪心解法 物流站的选址(一)穷举算法贪心算法 物流站的选址(二)回合制游戏快速包装 买卖股票的最佳时机问题 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你…...

【C/C++】【基础数论】33、算数基本定理

算术基本定理,又称正整数的唯一分解定理。 说起来比较复杂,但是看一下案例就非常清楚了 任何一个大于 1 的正整数都可以唯一地分解成有限个质数的乘积形式,且这些质数按照从小到大的顺序排列,其指数也是唯一确定的。 例如&#…...

聚簇索引与非聚簇索引

物理存储方式不同: 1. InnoDb默认数据结构是聚簇索引;MyISAM 是非聚簇索引 2. 聚簇索引 中表索引与数据是在一个文件中 .ibd;非聚簇索引中表索引(.MYI)与数据(.MYD)是在两个文件中 3. 聚簇索引中表数据行都存放在索引树…...

“类型名称”在Go语言规范中的演变

Go语言规范(The Go Programming Language Specification)[1]是Go语言的核心文档,定义了该语言的语法、类型系统和运行时行为。Go语言规范的存在使得开发者在实现Go编译器时可以依赖一致的标准,它确保了语言的稳定性和一致性&#…...

c++----继承(初阶)

大家好呀,今天我们也是多久没有更新博客了,今天来讲讲我们c加加中的一个比较重要的知识点继承。首先关于继承呢,大家从字面意思看,是不是像我们平常日常生活中很容易出现的,比如说电视剧里面什么富豪啊,去了…...

数据库系列(1)常见的四种非关系型数据库(NoSQL)

非关系型数据库(NoSQL) 非关系型数据库适用于需要灵活数据模型和高可扩展性的场景。常见的非关系型数据库包括: MongoDB:文档数据库,以JSON-like格式存储数据,适合快速开发和迭代。Cassandra:…...

大规模预训练语言模型的参数高效微调

人工智能咨询培训老师叶梓 转载标明出处 大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型…...

一场大模型面试,三个小时,被撞飞了

去华为面试大模型,一点半去五点半回,已经毫无力气。 1️⃣一轮面试—1小时 因为一面都是各个业务的主管,所以专业性很强,面试官经验很丰富,建议大家还是需要十分熟悉所学内容,我勉强通过一面。 2️⃣二轮…...

Python每次for循环向list中添加多个元素

Python中,我每次for loop要产生几个结果。要将这些结果加到一个list中。怎么最高效? 答: list extend 方法 在Python中,如果你想在循环中将多个元素添加到列表中,最直接和最高效的方式是使用列表的 append() 方法。每次循环时&a…...

Java爬虫抓取数据的艺术

在信息时代,数据的重要性不言而喻。对于Java开发者来说,掌握如何使用Java进行数据抓取是一项宝贵的技能。通过编写爬虫程序,我们可以从互联网的海量信息中提取有价值的数据,用于市场分析、客户洞察、内容监控等多种场景。本文将介…...

Unity场景内画车道线(根据五阶曲线系数)

之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。 由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。 使用在线图形计算器进行测试构建,公式…...

IPLOOK百万级用户容量核心网惊艳亮相北京PT展

2024年9月25日,以“推动数实深度融合,共筑新质生产力”为主题,本届中国国际信息通信展(PT展)在北京国家会议中心正式拉开帷幕。 广州爱浦路网络技术有限公司(简称:IPLOOK)&#xff…...

家庭网络的ip安全性高吗

家庭网络的IP安全性是一个重要的话题,涉及到如何保护家庭设备和用户的隐私。家庭网络的安全性既有其优势,也存在一些潜在的风险。以下是关于家庭网络IP安全性的几个关键点: 1. 家庭网络的优势 私有IP地址的使用 家庭网络中的设备通常使用私…...

LLM阅读推荐

(按名称排序) 【徹底解説】これからのエンジニアの必携スキル、プロンプトエンジニアリングの手引「Prompt Engineering Guide」を読んでまとめてみた(opens in a new tab)3 Principles for prompt engineering with GPT-3(opens in a new tab)A beginn…...

计算机网络笔记001

讲义 1.计算机网络的定义  定义: 一批独立自治的计算机系统的互连集合体  说明: 独立自治的计算机系统, 互连的手段是各种各样的, 依据协议进行 工作  2.计算机网络和通信网络  通信网络: 重点研究通…...

如何用IDEA连接HBase

编写java代码,远程连接HBase进行相关的操作 一、先导依赖 代码如下: 二、连接成功...

【JS代码规范】如何优化if-else代码规范

1. 快速结束&#xff0c;减少没必要的else 案例一&#xff1a;2种互斥的条件判断 function test(data) {let result ;if (data < 0) {result 负数;} else {result 非负数;}return result; }优化一&#xff1a; function test(data) {if (data < 0) {return 负数;} …...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…...