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环境变量中,供其他程序…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
