Python面试常见问题及答案8
一、基础部分
问题1: 解释Python中的切片(slicing)操作在列表、字符串上是如何工作的?
答案:
在列表和字符串中,切片操作可以获取其中的一部分元素。切片的语法是[start:stop:step]
。
- 对于列表,例如
my_list = [1, 2, 3, 4, 5]
。如果我们想要获取索引从1到3(不包括3)的元素,可以使用my_list[1:3]
,这将返回[2, 3]
。如果省略start
,则从开头开始,如my_list[:3]
返回[1, 2, 3]
;如果省略stop
,则到结尾,如my_list[1:]
返回[2, 3, 4, 5]
;step
表示每隔多少个元素选取一个,如my_list[::2]
返回[1, 3, 5]
。 - 对于字符串,例如
my_string = "Hello World"
。my_string[1:5]
会返回ello
。同样的规则适用于省略start
、stop
和修改step
。
问题2: Python中的异常处理机制是如何工作的?请举例说明。
答案:
Python使用try - except - else - finally
结构来进行异常处理。
- try块:包含可能会引发异常的代码。
- except块:当
try
块中的代码引发了指定类型的异常时,对应的except
块中的代码会被执行。例如:
try:num = 10 / 0
except ZeroDivisionError:print("除数不能为零")
- else块:如果
try
块中的代码没有引发异常,则else
块中的代码会被执行。 - finally块:无论是否发生异常,
finally
块中的代码都会被执行。例如:
try:f = open('test.txt', 'r')
except FileNotFoundError:print('文件不存在')
else:print(f.read())
finally:if 'f' in locals():f.close()
二、数据结构深入
问题3: 如何在Python中对字典按键(key)或值(value)进行排序?
答案:
- 按键排序:使用
sorted()
函数,传入字典的items()
方法返回的键值对元组列表,按照每个元组的第一个元素(键)排序。例如,对于字典my_dict = {'c': 3, 'a': 1, 'b': 2}
,sorted(my_dict.items())
会得到[('a', 1), ('b', 2), ('c', 3)]
。 - 按值排序:可以通过自定义函数作为
sorted()
函数的key
参数来实现。如对于上述字典,若要按值排序,可以使用:sorted(my_dict.items(), key = lambda item: item[1])
,这将得到[('a', 1), ('b', 2), ('c', 3)]
。
问题4: Python中的集合(set)有哪些操作?请举例说明交集、并集、差集操作。
答案:
- 集合的常见操作有添加元素(
add
方法)、删除元素(remove
或discard
方法等)、查找元素(in
关键字)等。 - 交集:使用
&
或者intersection
方法。例如,set1 = {1, 2, 3}
,set2 = {2, 3, 4}
,set1 & set2
或set1.intersection(set2)
都会得到{2, 3}
。 - 并集:使用
|
或者union
方法。例如,set1 | set2
或set1.union(set2)
会得到{1, 2, 3, 4}
。 - 差集:使用
-
或者difference
方法。例如,set1 - set2
或set1.difference(set2)
会得到{1}
。
三、函数高级
问题5: 什么是装饰器(Decorator)?请编写一个简单的装饰器示例。
答案:
装饰器是一种函数,它可以在不修改被装饰函数源代码的情况下,增加额外的功能到函数中。它接受一个函数作为输入,并返回一个新的函数。
以下是一个简单的计算函数运行时间的装饰器示例:
import timedef timer(func):def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__}运行时间为:{end - start}秒")return resultreturn wrapper@timer
def my_function():time.sleep(2)
四、面向对象拓展
问题6: 解释Python中的多态(Polymorphism)?
答案:
多态是一种面向对象编程的概念,它指的是不同对象对同一方法调用可以有不同的行为反应。在Python中,多态通常通过以下方式体现:
- 方法重写(Override):子类可以重写父类中的方法,当调用该方法时,根据对象的实际类型决定调用的是父类还是子类的方法。例如:
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print('汪汪汪')class Cat(Animal):def speak(self):print('喵喵喵')dog = Dog()
cat = Cat()
dog.speak()
cat.speak()
- 鸭子类型(Duck Typing):如果一个对象看起来像鸭子(具有某些方法或属性),那么就可以像鸭子一样对待它。例如,有两个类都有
draw
方法,不管它们的类名和继承关系如何,只要有draw
方法就能在相同的逻辑下调用。
问题7: 什么是类方法(classmethod)和静态方法(staticmethod)?它们有什么区别?
答案:
- 类方法:使用
@classmethod
装饰器定义。类方法的第一个参数是cls
,表示类本身。类方法可以访问和修改类属性,并且可以通过类名或者实例调用。例如:
class MyClass:class_attr = 0@classmethoddef class_method(cls):cls.class_attr = 1
- 静态方法:使用
@staticmethod
装饰器定义。静态方法不需要传递类或实例作为第一个参数,它类似于类中的普通函数,但逻辑上与类相关。例如:
class MyClass:@staticmethoddef static_method():print('这是一个静态方法')
- 区别:类方法可以操作类属性,它与类的关系更紧密;而静态方法更像是类中的工具函数,不能直接访问类属性(除非通过类名引用)。
五、模块与包
问题8: 如何在Python中创建自定义模块和包?
答案:
- 自定义模块:
- 创建一个
.py
文件,例如my_module.py
。其中可以包含函数、类等各种Python代码。 - 在其他文件中可以通过
import my_module
来导入这个模块,然后就可以使用my_module
中的代码。例如,如果my_module.py
中有一个my_function
函数,可以通过from my_module import my_function
或者import my_module
后使用my_module.my_function
来调用。
- 创建一个
- 自定义包:
- 创建一个文件夹,例如
my_package
,并在里面创建一个__init__.py
文件(在Python 3中,这个文件可以为空,它的存在表示这个文件夹是一个包)。 - 在包内可以添加多个
.py
模块文件,如module1.py
,module2.py
等。 - 在其他地方使用这个包时,可以通过
import my_package.module1
或者from my_package import module1
等方式。
- 创建一个文件夹,例如
问题9: 请解释Python中的__init__.py
文件在包导入中的作用。
答案:
__init__.py
文件在包导入中有以下作用:
- 它将一个文件夹标记为一个Python包,使Python可以把这个文件夹当作一个模块来导入。
- 可以在
__init__.py
文件中编写导入相关的代码,例如提前导入包内的某些模块,方便外部使用包时直接引用。例如,在my_package
的__init__.py
文件中可以写from. import module1
,这样在使用import my_package
时就可以直接通过my_package.module1
访问module1
模块,而不需要再单独从my_package
中导入module1
。 - 它可以包含一些初始化的代码,例如设置包级别的变量、初始化数据库连接等在整个包导入时需要执行的操作。
问题10: 如何在Python中处理循环导入的问题?
答案:
循环导入是指两个或多个模块之间相互导入的情况。处理方法有:
- 重新组织代码结构:尽量避免模块之间的循环依赖,将共享的代码抽取到一个独立的模块中。
- 延迟导入:将一些导入语句放在函数内部,而不是放在模块的顶部,这样只有在函数被调用时才会触发导入。例如,在模块
A.py
和B.py
存在循环导入的情况下:
在A.py
中:
# def my_function():
# import B
# # 使用B中的功能
在B.py
中:
# def other_function():
# import A
# # 使用A中的功能
相关文章:
Python面试常见问题及答案8
一、基础部分 问题1: 解释Python中的切片(slicing)操作在列表、字符串上是如何工作的? 答案: 在列表和字符串中,切片操作可以获取其中的一部分元素。切片的语法是[start:stop:step]。 对于列表࿰…...

ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...

u3d动画系统五【StateMachineBehaviour类】
一.StateMachineBehaviour概述 状态机行为是一类特殊脚本。与将常规 Unity 脚本 (MonoBehaviour) 附加到单个游戏对象类似,您可以将 StateMachineBehaviour 脚本附加到状态机中的单个状态。因此可编写一些将在状态机进入、退出或保持在特定状态时执行的代码。这意味…...

IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...

使用C++实现RSA加密解密
一,RSA简介。 RSA,一种非对称加密方式。是目前为止最有影响力的加密算法之一,而且是第一个同时应用于加密和数字签名的算法。 其原理为:两个大素数相乘容易,但是若想将两个大素数相乘的积再分解为两个原始的素数很难…...
C++归并与快速
快排 #include<bits/stdc.h> #include<algorithm> using namespace std; void f(int,int); void cl(int,int,int); void q(int,int); int a[211]; int n; int main(){cin>>n;for(int i0;i<n;i){cin>>a[i];}q(0,n-1);for(int i0;i<n;i){cout<…...

金蝶云苍穹踩过的坑(慢慢更新)
IDEA不能用最新版,不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了,现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候,登录N次能成功一次…...

AndroidStudio——安卓项目结构与文件介绍
一、AndroidStudio界面 一个安卓项目界面主要由以下几部分组成: 1.菜单栏:位于顶部,基本的各项菜单操作 2.项目结构:通常位于左侧,展示当前项目的目录结构 3.编辑窗口:通常位于中间,可以用于编…...

华为自反ACL实验
一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器,由于三台服务器的端口都映射出去了,领导要求A网段的三台服务器不能访问内网B,C网段,同时B、C网段内网用户可以访问A段的94、95、96服务器; 也就是PC4\…...
yml和xml分别代表什么
YML 和 XML 是两种不同的数据序列化格式,它们在软件开发和数据交换中有着广泛的应用: YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写,特别适合于配置文件。YAML 使用缩进来表示数…...
Qt多线程编程
在Qt中,多线程编程是一个常见的需求,特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务,从而提高性能和响应速度。Qt提供了一套完善的多线程支持,包括线程类(QThrea…...

springboot438校园志愿者管理系统(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统校园志愿者管理系统信息管理难度大,容错率低&…...

PostgreSQL 常用运维SQL整理
一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…...
Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析
Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析 本文详细介绍了 Debezium Oracle 连接器中如何解析 CREATE TABLE AS SELECT (CTAS) 语句,通过具体的实现代码帮助读者理解 ANTLR 监听器在复杂 SQL 解析中的应用。 文章目录 Debezium Oracle…...

从零开始学docker(五)-可用的docker镜像
最近docker镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…...

力扣——322. 零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...
.Net_比对Json文件是否一致
简介 该方法用于比较两个Json文件是否完全一致,仅考虑内容若两个文件中的内容只是顺序不一致,内容是一样的,那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…...

科研笔记:ARR 与 ACL rolling
1 ARR 介绍 ARR 提供 评审服务 —— 仅限评审 —— 对于提交的论文。评审不会针对特定会议/场所,但评审标准与传统会议的主会场长文或短文提交要求相同(如 ACL 或其他由 ACL 主办的重要会议) 2 提交论文进行 ARR 评审 提交截止日期 每两个…...

【2024】Camunda常用功能基本详细介绍和使用-上 (1)
这里写目录标题 前言一、 介绍基本概念介绍1.BPMN2.Form3.DMN 二、Camunda使用1、下载安装1.1、camunda-modeler:BPMN绘画工具1.2、camunda-bpm-run:web端控制页面 2、创建流程2.1、部署一个基础流程2.2、添加用户任务2.2.1、绑定表单2.2.1.1、Generated…...

用人话讲计算机:Python篇!(十二)正则运算+re模块
目录 一、正则表达式 (1)什么是正则表达式 (2)它的结构及使用 示例: 1.字符 . (←这里有个小点哦) 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d (3)补充ÿ…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...