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

Python常见面试题的详解9

1. 如何找出整数数组中第二大的数

  • 要点

  1. 定义一个函数用于在整数数组里找出第二大的数。

  2. 若数组元素少于 2 个,则返回 None

  3. 借助两个变量 firstsecond 来跟踪最大数和第二大数。

  4. 可以添加异常处理,以应对输入非整数数组的情况。

  5. 若数组包含重复元素,可考虑返回去重后第二大的数。

  • 示例

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. 写出如下代码的输出结果并分析

  • 要点
  1. 代码中的 multi 函数返回一个包含 4 个 lambda 函数的列表。

  2. 这些 lambda 函数形成闭包,捕获外部变量 i

  3. 当调用这些 lambda 函数时,i 的值为其最终值 3,所以输出为 [9, 9, 9, 9]

  4. 若要实现预期的 [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. 利用字典来统计字符串中每个字符的出现次数。

  2. 遍历字符串,若字符已在字典中则计数加 1,否则将其添加到字典并初始化为 1。

  3. 可使用 collections.Counter 类来简化代码,Counter(s) 即可实现相同功能。

  4. 统计时可忽略大小写,将字符串统一转换为大写或小写后再进行统计。

  • 示例

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 函数的用法和场景

  • 要点
  1. super 函数用于调用父类的方法。

  2. 在单继承中,可在子类的 __init__ 方法里调用父类的 __init__ 方法,实现代码复用。

  3. 在多继承中,能确保按正确的方法解析顺序(MRO)调用父类方法。

  • 示例

python

class Parent:def __init__(self):print("Parent __init__")class Child(Parent):def __init__(self):super().__init__()print("Child __init__")c = Child()

5. 类方法、类实例方法、静态方法的区别

  • 要点
  1. 实例方法:第一个参数是 self,代表实例对象,通过实例对象调用,用于操作实例的属性和方法。

  2. 类方法:使用 @classmethod 装饰器,第一个参数是 cls,代表类本身,可通过类名或实例对象调用,常用于创建工厂方法。

  3. 静态方法:使用 @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. 遍历对象的所有属性

  • 要点
  1. 使用 dir 函数获取对象的所有属性名。

  2. 通过过滤掉以 __ 开头的内置属性,打印出用户自定义的属性名。

  3. 若要获取属性的值,可结合 getattr 函数。

  4. 可将属性名和属性值以字典形式存储,方便后续处理。

  • 示例

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. 如何定义支持多种操作符的类

  • 要点
  1. 通过定义特殊方法,使类支持加法、减法、乘法等操作符。

  2. 对于不同类型的操作数,可进行类型判断并执行相应操作。

  3. 可以添加更多操作符支持,如除法、取模等。

  4. 可以考虑实现反向操作符,如 __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 的缺点

  • 要点
  1. Cython:学习成本高,需掌握特定语法;代码可移植性受影响;调试复杂。

  2. Pypy:与 CPython 兼容性有问题;启动时间长;内存占用高。

  3. CPython:执行速度慢,尤其是 CPU 密集型任务;存在全局解释器锁(GIL),限制多线程并行性能。

  4. Numba:支持的 Python 语法和数据类型有限;需提前确定输入数据类型;编译时间可能较长。

9. 抽象类和接口类的区别和联系

  • 要点
  1. 联系:都不能实例化,用于定义规范和约束子类行为;都可包含抽象方法,要求子类实现。

  2. 区别:抽象类可包含抽象方法、具体方法和属性;接口类通常只含抽象方法,无具体实现和属性。

10. 如何动态获取和设置对象的属性

  • 要点
  1. 使用 getattr 函数动态获取对象的属性。

  2. 使用 setattr 函数动态设置对象的属性。

  3. 可结合 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 个&#xff0c;则返回 None。 借助两个变量 first 和 second 来跟踪最大数和第二大数。 可以添加异常处理&#xff0c;以应对输入非整数数组的情况。 若数组包含重复…...

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&#xff1a; CREATE DATABASE dbname; 人大金仓&#xff08;Kingbase&#xff09;&#xff1a; 在人大金仓中&#xff0c;CREATE DATABASE 的语法通常相同&#xff0c;但可能需要特别注意字符集的指定&#xff08;如果涉及到多语言支持…...

【R语言】回归分析与判别分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型&#xff08;Linear Models&#xff09;的主要函数。线性模型是一种统计方法&#xff0c;用于描述一个或多个自变量&#xff08;预测变量、解释变量&#xff09;与因变量&#xff08;响应变量&#xff09;之间的关系…...

ES6中Object.defineProperty 的详细用法和使用场景以及例子

ES6 Object.defineProperty() 用法总结 Object.defineProperty() 是 ES5 引入的一个方法&#xff0c;ES6 继续强化了该方法的使用&#xff0c;它允许我们为对象的属性定义或修改 属性描述符。它能够控制对象属性的行为&#xff0c;如读写权限、可枚举性和可配置性。 1. Objec…...

揭秘云计算 | 5、关于云计算效率的讨论

一、 公有云效率更高&#xff1f; 解&#xff1a;公有云具有更高的效率。首先我们需要知道效率到底指的是什么。这是个亟须澄清的概念。在这里效率是指云数据中心&#xff08;我们将在后文中介绍其定义&#xff09;中的IT设备资源利用率&#xff0c;其中最具有代表性的指标就是…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…...

如何查询网站是否被百度蜘蛛收录?

一、使用site命令查询 这是最直接的方法。在百度搜索框中输入“site:你的网站域名”&#xff0c;例如“site:example.com”&#xff08;请将“example.com”替换为你实际的网站域名&#xff09;。如果搜索结果显示了你的网站页面&#xff0c;并且显示了收录的页面数量&#xf…...

什么是网络安全审计?网络安全审计的作用...

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

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 公司开发的专业集成开发环境&#xff08;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文件包含远程文件包含 基础概念 文件包含&#xff0c;相当…...

升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?

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

分类预测 | MFO-LSSVM飞蛾扑火算法优化最小二乘支持向量机多特征分类预测Matlab实现

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

MyBatis Plus核心功能

一、条件构造器 1.为什么要学&#xff1f; 用于方便地构建SQL查询条件 2.如何使用&#xff1f; 3.实战案例 例&#xff1a;查询出名字中带o的&#xff0c;存款大于等于1000元的人的id,username,info,balance字段 数据库如图&#xff1a; 示例&#xff1a; Test void testL…...

nginx ngx_http_module(10) 指令详解

nginx ngx_http_module(10) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_v2_module&#xff1a;HTTP/2支持模块&#xff0c;允许Nginx通过HTTP/2协议与客户端进行通信。HTTP/2带来了许多性能优化&#xff0c;如多路复用、头部压缩和服务器推…...

【ENSP】链路聚合的两种模式

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

Windows环境安装部署minimind步骤

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

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三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

如何在网页里填写 PDF 表格?

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

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理&#xff1a;检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目&#xff1a;RankRAG&#xff1a;Unifying Context Ranking…...

SQL注入篇-sqlmap的配置和使用

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