Python常见面试题的详解9
1. 如何找出整数数组中第二大的数
-
要点
-
定义一个函数用于在整数数组里找出第二大的数。
-
若数组元素少于 2 个,则返回
None
。 -
借助两个变量
first
和second
来跟踪最大数和第二大数。 -
可以添加异常处理,以应对输入非整数数组的情况。
-
若数组包含重复元素,可考虑返回去重后第二大的数。
-
示例
python
def find_second_largest(arr):if len(arr) < 2:return Nonefirst = second = float('-inf')for num in arr:if num > first:second = firstfirst = numelif num > second and num != first:second = numreturn second if second != float('-inf') else None# 测试
arr = [12, 35, 1, 10, 34, 1]
print(find_second_largest(arr))
2. 写出如下代码的输出结果并分析
- 要点
-
代码中的
multi
函数返回一个包含 4 个lambda
函数的列表。 -
这些
lambda
函数形成闭包,捕获外部变量i
。 -
当调用这些
lambda
函数时,i
的值为其最终值3
,所以输出为[9, 9, 9, 9]
。 -
若要实现预期的
[0, 3, 6, 9]
输出,可使用默认参数来固定i
的值,修改为[lambda x, i=i: i*x for i in range(4)]
。
- 示例
python
def multi():return [lambda x : i*x for i in range(4)]
print([m(3) for m in multi()])
3. 统计字符串中字符出现的次数
- 要点
-
利用字典来统计字符串中每个字符的出现次数。
-
遍历字符串,若字符已在字典中则计数加 1,否则将其添加到字典并初始化为 1。
-
可使用
collections.Counter
类来简化代码,Counter(s)
即可实现相同功能。 -
统计时可忽略大小写,将字符串统一转换为大写或小写后再进行统计。
- 示例
python
def count_characters(s):char_count = {}for char in s:if char in char_count:char_count[char] += 1else:char_count[char] = 1return char_count# 测试
s = "hello world"
print(count_characters(s))
4. super
函数的用法和场景
- 要点
-
super
函数用于调用父类的方法。 -
在单继承中,可在子类的
__init__
方法里调用父类的__init__
方法,实现代码复用。 -
在多继承中,能确保按正确的方法解析顺序(MRO)调用父类方法。
- 示例
python
class Parent:def __init__(self):print("Parent __init__")class Child(Parent):def __init__(self):super().__init__()print("Child __init__")c = Child()
5. 类方法、类实例方法、静态方法的区别
- 要点
-
实例方法:第一个参数是
self
,代表实例对象,通过实例对象调用,用于操作实例的属性和方法。 -
类方法:使用
@classmethod
装饰器,第一个参数是cls
,代表类本身,可通过类名或实例对象调用,常用于创建工厂方法。 -
静态方法:使用
@staticmethod
装饰器,无默认第一个参数,可通过类名或实例对象调用,用于组织代码,与类和实例无直接关系。
- 示例
python
class MyClass:def instance_method(self):return 'Instance method called', self@classmethoddef class_method(cls):return 'Class method called', cls@staticmethoddef static_method():return 'Static method called'obj = MyClass()
print(obj.instance_method())
print(MyClass.class_method())
print(MyClass.static_method())
6. 遍历对象的所有属性
- 要点
-
使用
dir
函数获取对象的所有属性名。 -
通过过滤掉以
__
开头的内置属性,打印出用户自定义的属性名。 -
若要获取属性的值,可结合
getattr
函数。 -
可将属性名和属性值以字典形式存储,方便后续处理。
- 示例
python
class MyClass:def __init__(self):self.name = "John"self.age = 30obj = MyClass()
for attr in dir(obj):if not attr.startswith('__'):print(attr)
7. 如何定义支持多种操作符的类
- 要点
-
通过定义特殊方法,使类支持加法、减法、乘法等操作符。
-
对于不同类型的操作数,可进行类型判断并执行相应操作。
-
可以添加更多操作符支持,如除法、取模等。
-
可以考虑实现反向操作符,如
__radd__
等,以支持不同顺序的操作。
- 示例
python
class MyNumber:def __init__(self, value):self.value = value# 加法def __add__(self, other):if isinstance(other, MyNumber):return MyNumber(self.value + other.value)return MyNumber(self.value + other)# 减法def __sub__(self, other):if isinstance(other, MyNumber):return MyNumber(self.value - other.value)return MyNumber(self.value - other)# 乘法def __mul__(self, other):if isinstance(other, MyNumber):return MyNumber(self.value * other.value)return MyNumber(self.value * other)# 字符串表示def __str__(self):return str(self.value)# 测试
a = MyNumber(5)
b = MyNumber(3)
print(a + b)
print(a - b)
print(a * b)
8. 比较Cython、Pypy、CPython、Numba 的缺点
- 要点
-
Cython:学习成本高,需掌握特定语法;代码可移植性受影响;调试复杂。
-
Pypy:与 CPython 兼容性有问题;启动时间长;内存占用高。
-
CPython:执行速度慢,尤其是 CPU 密集型任务;存在全局解释器锁(GIL),限制多线程并行性能。
-
Numba:支持的 Python 语法和数据类型有限;需提前确定输入数据类型;编译时间可能较长。
9. 抽象类和接口类的区别和联系
- 要点
-
联系:都不能实例化,用于定义规范和约束子类行为;都可包含抽象方法,要求子类实现。
-
区别:抽象类可包含抽象方法、具体方法和属性;接口类通常只含抽象方法,无具体实现和属性。
10. 如何动态获取和设置对象的属性
- 要点
-
使用
getattr
函数动态获取对象的属性。 -
使用
setattr
函数动态设置对象的属性。 -
可结合
hasattr
函数先检查属性是否存在,再进行获取或设置操作。
- 示例
python
class MyClass:def __init__(self):self.name = "John"obj = MyClass()
attr_value = getattr(obj, 'name')
print(attr_value) class MyClass2:passobj2 = MyClass2()
setattr(obj2, 'age', 30)
print(obj2.age)
相关文章:
Python常见面试题的详解9
1. 如何找出整数数组中第二大的数 要点 定义一个函数用于在整数数组里找出第二大的数。 若数组元素少于 2 个,则返回 None。 借助两个变量 first 和 second 来跟踪最大数和第二大数。 可以添加异常处理,以应对输入非整数数组的情况。 若数组包含重复…...
MAVSDK - Custom Mavlink处理
编译命令中开启 Custom Mavlink 编译 cmake -DCMAKE_BUILD_TYPERelease -DMAVLINK_DIALECTcustom -DBUILD_CUSTOM_MAVLINKON -DCUSTOM_MAVLINK_PATH"G:/Custom_Mavlink" -DBUILD_CUSTOM_PLUGINSON -DENABLED_CUSTOM_PLUGINS"speaker" -DENABLED_PLUGINS&qu…...

java每日精进 2.13 MySql迁移人大金仓
1.迁移数据库 1. 数据库创建语句 MySQL: CREATE DATABASE dbname; 人大金仓(Kingbase): 在人大金仓中,CREATE DATABASE 的语法通常相同,但可能需要特别注意字符集的指定(如果涉及到多语言支持…...

【R语言】回归分析与判别分析
一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...
ES6中Object.defineProperty 的详细用法和使用场景以及例子
ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法,ES6 继续强化了该方法的使用,它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为,如读写权限、可枚举性和可配置性。 1. Objec…...

揭秘云计算 | 5、关于云计算效率的讨论
一、 公有云效率更高? 解:公有云具有更高的效率。首先我们需要知道效率到底指的是什么。这是个亟须澄清的概念。在这里效率是指云数据中心(我们将在后文中介绍其定义)中的IT设备资源利用率,其中最具有代表性的指标就是…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解
Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 前面我们已经将进程通信部分讲完了,现在我们来讲一个进程部分也非常重要的知识点——信号,信号也是进程间通信的一…...
如何查询网站是否被百度蜘蛛收录?
一、使用site命令查询 这是最直接的方法。在百度搜索框中输入“site:你的网站域名”,例如“site:example.com”(请将“example.com”替换为你实际的网站域名)。如果搜索结果显示了你的网站页面,并且显示了收录的页面数量…...

什么是网络安全审计?网络安全审计的作用...
网络安全审计通过对网络数据的采集、分析、识别,实时动态监测通信内容、网络行为和网络流量,发现和捕获各种敏感信息、违规行为,实时报警响应,全面记录网络系统中的各种会话和事件,实现对网络信息的智能关联分析、评估…...

EasyExcel实现excel导入(模版上传)
目录 效果pom.xmlapplication.ymlcontrollerservice依赖类前台vue代码某个功能如果需要添加大量的数据,通过一条条的方式添加的方式,肯定不合理,本文通过excel导入的方式来实现该功能,100条数据导入成功85条,失败15条,肯定需要返回一个表格给前台或者返回1个错误excel给前…...

Vue 3最新组件解析与实践指南:提升开发效率的利器
目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…...

【前端】如何安装配置WebStorm软件?
文章目录 前言一、前端开发工具WebStorm和VS Code对比二、官网下载三、安装1、开始安装2、选择安装路径3、安装选项4、选择开始菜单文件夹5、安装成功 四、启动WebStorm五、登录授权六、开始使用 前言 WebStorm 是一款由 JetBrains 公司开发的专业集成开发环境(IDE…...
vllm专题(一):安装-GPU
vLLM 是一个 Python 库,支持以下 GPU 变体。选择您的 GPU 类型以查看供应商特定的说明: 1. NVIDIA CUDA vLLM 包含预编译的 C++ 和 CUDA(12.1)二进制文件。 2. AMD ROCm vLLM 支持配备 ROCm 6.3 的 AMD GPU。 注意 此设备没有预构建的 wheel 包,因此您必须使用预构建的 Do…...

php文件包含
文章目录 基础概念php伪协议什么是协议协议的格式php中的协议file协议http协议ftp协议php://input协议php://filter协议php://data协议 php文件上传机制高级文件包含nginx文件日志包含临时文件包含session文件包含pear文件包含远程文件包含 基础概念 文件包含,相当…...

升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
随着 Spring Boot 3 的发布,许多开发者开始考虑将他们的项目升级到这个新版本。Spring Boot 3 带来了许多新特性和改进,尤其是在 HTTP 请求处理方面。本文将详细介绍如何在 Spring Boot 3 中发送 HTTP 请求,并通过代码示例帮助你快速上手。 …...

分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现
分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现 目录 分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现MFO-LSSVM飞蛾扑火算法优化最小二…...

MyBatis Plus核心功能
一、条件构造器 1.为什么要学? 用于方便地构建SQL查询条件 2.如何使用? 3.实战案例 例:查询出名字中带o的,存款大于等于1000元的人的id,username,info,balance字段 数据库如图: 示例: Test void testL…...
nginx ngx_http_module(10) 指令详解
nginx ngx_http_module(10) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_v2_module:HTTP/2支持模块,允许Nginx通过HTTP/2协议与客户端进行通信。HTTP/2带来了许多性能优化,如多路复用、头部压缩和服务器推…...

【ENSP】链路聚合的两种模式
【ENSP】链路聚合的两种模式 1、背景介绍2、链路聚合的使用场景3、配置过程1、手工模式Eth-Trunk配置2、静态LACP模式Eth-Trunk 4、总结 1、背景介绍 随着网络规模的不断扩大,人们对骨干链路的带宽吞吐量和可靠性提出了越来越高的要求。在传统方案中,为…...

Windows环境安装部署minimind步骤
Windows环境安装部署minimind步骤 必要的软件环境 git git,可下载安装版,本机中下载绿色版,解压到本地目录下(如:c:\soft\git.win64),可将此路径添加到PATH环境变量中,供其他程序…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...