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

Python面经【3】

零、可迭代对象

  1. 可迭代对象是迭代器和生成器的基础,简单来说,可以使用for循环遍历的对象就是可迭代对象,比如常见的list、set和dict。
  2. 在python中,可迭代对象是指实现了__iter__()方法的对象,当我们使用for循环遍历一个可迭代对象时,实际上是调用该对象的__iter__()方法获取一个迭代器,并使用该迭代器迭代访问对象的元素。

一、Python的迭代器、生成器

  • 迭代器

  1. 迭代器是python中实现迭代协议的一个对象,本质上是一种python数据结构,它实现了__iter__()和__next__()等方法,其中,__iter__()方法返回迭代器自身,__next__()方法返回序列中的下一个值。
  2. 迭代器能够支持for循环以及next()函数的调用。在每次迭代时,迭代器都会产生一个值,直到没有下一个值了,就会抛出StopIteration异常。
  3. 如何判断对象是否是迭代器,和判断是否是可迭代对象的方法差不多,只要把Iterable换成Iterator。
  • 生成器

1.	def spam():
2.	    yield”first”
3.	    yield”second”
4.	    yield”third”
5.	for x in spam:
6.	Print(x)
7.	-----结果如下-----
8.	first
9.	second
10.	third

  1. 我们创建列表的时候,受到内存限制,容量肯定是有限的,而且不可能全部给他一次枚举出来。Python常用的列表生成式有一个致命的缺点就是定义即生成,非常的浪费空间和效率。
  2. 若列表元素可以按照某种算法推算出来,那么在循环的过程中不断推算中后续的元素,这样就不必创建完整的list,从而节省大量的空间。在python中,这种一边循环一边计算的机制,称为生成器:generator。与字典和集合相反,生成器是典型的时间换空间的例子。
  3. 创建一个generator,最简单的方法就是改造列表生成式,还有就是生成器函数,通过def定义,然后使用yield来支持迭代器协议,比迭代器写起来更简单。
  4. 进行函数调用的时候,返回一个生成器对象。在使用next()调用的时候,遇到yield就返回,记录此时的函数调用位置,下次调用next()时,从断点处开始。
  5. 我们完全可以像使用迭代器一样使用generator,当然除了定义,定义一个迭代器,需要分别实现iter()和next()方法,但generator只需要yield就可以。

二、生成器、迭代器的区别

虽然生成器和迭代都可以用于for循环的遍历,但它们之间有明显的不同之处:

1、实现方式不同

生成器使用了yield语句来实现,而迭代器使用了魔法函数__iter__()和__next__()来实现。

2、生成方式不同

生成器可以逐个生成序列中的值,而迭代器一次性生成整个序列,将其存储在内存中。

3、执行方式不同

生成器可以像函数一样调用,可以在每次迭代的时产生和恢复值,而迭代器则按照序列的下一个元素依次执行。

4、功能不同

生成器主要用于生成序列,而迭代器主要用于遍历序列。

三、什么是装饰器?

装饰器本质上是还是一个函数,它可以让已有函数不做任何改动的情况下增加功能。

装饰器允许通过将现有函数传递给装饰器,从而向现有函数添加一些额外的功能,该装饰器将执行现有函数的功能添加的额外功能

四、函数装饰器有什么作用

装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能。装饰器的返回值也是一个函数对象,它适用于有切面需要的场景。比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

 1. def first(fun):2.     def second():3.         print('start')4.         fun()5.         print('end')6.         print fun.__name__7.     return second8.  9. def man():
10.     print('i am a man()')
11.  
12. f = first(man)
13. f()

等价于

 1.  1. def first(func):2.  2.     def second():3.  3.         print('start')4.  4.         func()5.  5.         print('end')6.  6.         print (func.__name__)7.  7.     return second8.  8.  9.  9. @first
10. 10. def man():
11. 11.     print('i am a man()')
12. 12.  
13. 13. man()
14. ------ 结果 ------
15. Start
16. I am a man()
17. End
18. man

 上面的这段代码和之前的代码的作用一模一样。区别在于之前的代码直接“明目张胆”的使用first函数去封装函数,而上面这个用了【语法糖】来封装man函数。在上述代码中【@first】在man函数的上面,表示对man函数使用first装饰器。【@】是装饰器的语法,【first】是装饰器的名称。

五、一句话解释什么样的语言能够使用装饰器

函数可以作为参数传递的语言,可以使用装饰器。

相关文章:

Python面经【3】

零、可迭代对象 可迭代对象是迭代器和生成器的基础,简单来说,可以使用for循环遍历的对象就是可迭代对象,比如常见的list、set和dict。在python中,可迭代对象是指实现了__iter__()方法的对象,当我们使用for循环遍历一个…...

Python集合类型

目录 目标 版本 官方文档 集合分类 实战 创建 循环 常用方法 目标 掌握set和frozenset两种集合的使用方法,包括:创建、交集、并集、差集等操作。 版本 Python 3.12.0 官方文档 Set Types — set, frozensethttps://docs.python.org/3/library/s…...

npm install报错常用解题思路

最近刚接手一个“新”项目,让我很无语。明明是去年起的项目,但是它所用的部分技术栈非常旧,我启动项目,控制台一堆warning报错,然后项目结构也很让我不适应,很多地方都可以用文件夹包一下来方便定位。哎&am…...

conda: error: argument COMMAND: invalid choice

简介 使用conda activate 时,可能会报:conda: error: argument COMMAND: invalid choice: ‘activate’ (choose from ‘clean’, ‘compare’, ‘config’, ‘create’, ‘info’, ‘init’, ‘install’, ‘list’, ‘notices’, ‘package’, ‘remo…...

数仓成本下降近一半,StarRocks 存算分离助力云览科技业务出海

成都云览科技有限公司倾力打造了凤凰浏览器,专注于为海外用户提供服务,公司致力于构建一个全球性的数字内容连接入口,为用户带来更为优质、高效、个性化的浏览体验。 作为数据驱动的高科技公司,从数据中挖掘价值一直是公司核心任务…...

Apache基线检查

一、确保对OS根目录禁用覆盖 当 AllowOverride 指令设置为 None 时,Apache 将禁止在该目录下使用 .htaccess 文件来覆盖任何配置项。这意味着,除非您在主配置文件中显式地指定,否则该目录下的任何 .htaccess 文件都将被忽略。 禁用 .htaccess 文件可以提高服务器的安全性,因…...

flink的集成测试

背景 日常测试中我们使用flink的TestHarness只能测试单个算子,很多情况下我们需要集成测试来测试真正的问题,所以在flink中进行集成测试还是非常有必要的,本文就来记录下如何在flink中进行集成测试 flink中进行集成测试 flink中进行集成测…...

gitee推荐-1Panel

以下内容来源于gitee。 gitee地址:1Panel: 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。 大概和宝塔类似,但支持docker。在线体验:https://demo.1panel.cn/ 稍微试了下,没找到apache,…...

GEE 22:基于GEE实现物种分布模型(更新中。。。。。。)

物种分布模型 1. 数据点准备1.1 数据加载1.2 去除指定距离内的重复点1.3 定义研究区范围1.4 选择预测因子 1. 数据点准备 1.1 数据加载 首先需要将CSV文件导入到GEE平台中,同样也可以导入shp格式文件。 // 1.Loading and cleaning your species data *************…...

阿里云windwos 安装oracle数据库,外部用工具连接不上,只能在服务器本机通过127.0.0.1 连接

1. 首先检查阿里云服务器安全组端口是否开放 oracle 数据库端口 2. 其次找到oracle 安装的目录,打开这俩个文件,将localhost 修改为 服务器本机名称 3.重启oracle 监听服务,就可以连接了...

UniApp 中的 image 属性讲解

在 UniApp 中,image 是用于显示图片的组件,它具有多种属性,可以控制图片的展示方式和行为。下面我将为您讲解一些常用的 image 属性。 基本属性 src:指定要显示的图片资源路径,可以是本地路径或远程 URL。mode&#…...

卷积神经网络(CNN)车牌识别

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据3.数据可视化4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、设置动态学习率五、编译六、训练八、保存和…...

弹窗concrt140.dll丢失的解决方法,深度解析concrt140.dll丢失的原因

在计算机使用过程中,我们经常会遇到一些错误提示或者系统崩溃的情况。其中,concrt140.dll是一个常见的错误提示,这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍5种详细的解决方法,帮助您恢…...

CANdelaStudio 使用教程4 编辑State

文章目录 简述1、State Groups2、Dependencies3、 Defaults State1、 会话状态2、 新增会话状态3、 编辑 服务对 State 的依赖关系 State Diagram 简述 1、State Groups 2、Dependencies 在这里,可以编辑现有服务在不同会话状态或安全访问状态的支持情况和状态转换…...

FANUC机器人到达某个点位时,为什么不显示@符号?

FANUC机器人到达某个点位时,为什么不显示@符号? 该功能由变量$MNDSP_POSCF = 0(不显示)/1(显示)/2(光标移动该行显示) 控制,该变量设置为不同的值,则启用对应的功能。 如下图所示,为该变量设置不同的值时的对比, 其他常用的系统变量可参考以下内容: 在R寄存器指定速度…...

JVM运行参数介绍 -Xms -Xmx -Xmn -Xss

文章目录 CharGPT问答Java运行参数“-Xmx2048m -Xms1024m -Xmn512m -Xss256k”如何调优jvm的运行参数 JVM相关介绍Java 虚拟机底层原理知识总结 CharGPT问答 Java运行参数“-Xmx2048m -Xms1024m -Xmn512m -Xss256k” 2023/11/26 20:30:27 这些参数是用于配置 Java 虚拟机&am…...

Hive删除符合条件的记录

Hive在使用中不支持update和delete操作,那么如果想删除部分条件的记录需要怎么操作?本文记录下解决方法。 思路:使用selectwhere选出想要保留的数据,使用insert overwrite向原表覆盖插入数据. insert overwrite table dbname.tab…...

Linux加强篇006-存储结构与管理硬盘

目录 前言 1. 从“/”开始 2. 物理设备命名规则 3. 文件系统与数据资料 4. 挂载硬件设备 5. 添加硬盘设备 6. 添加交换分区 7. 磁盘容量配额 8. VDO虚拟数据优化 9. 软硬方式链接 前言 悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非…...

GIT版本控制和常用命令使用介绍

GIT版本控制和常用命令使用介绍 1. 版本控制1.1 历史背景1.2 什么是版本控制1.3 常见版本控制工具1.4 版本控制的分类 2 Git介绍2.1 Git 工作流程2.2 基本概念2.3 文件的四种状态2.4 忽略文件2.5 Git命令2.5.1 查看本地git配置命令2.5.2 远程库信息查看命令2.5.3 分支交互命令2…...

微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库

初识Docker 项目部署的问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 Docker如何解决依赖的兼容问题的? 将应用的Libs (函数库)、Deps (依赖)配置与应用…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...