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

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。同样的规则适用于省略startstop和修改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方法)、删除元素(removediscard方法等)、查找元素(in关键字)等。
  • 交集:使用&或者intersection方法。例如,set1 = {1, 2, 3}set2 = {2, 3, 4}set1 & set2set1.intersection(set2)都会得到{2, 3}
  • 并集:使用|或者union方法。例如,set1 | set2set1.union(set2) 会得到{1, 2, 3, 4}
  • 差集:使用-或者difference方法。例如,set1 - set2set1.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.pymodule2.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.pyB.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]。 对于列表&#xff0…...

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不能用最新版&#xff0c;不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了&#xff0c;现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候&#xff0c;登录N次能成功一次…...

AndroidStudio——安卓项目结构与文件介绍

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

华为自反ACL实验

一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器&#xff0c;由于三台服务器的端口都映射出去了&#xff0c;领导要求A网段的三台服务器不能访问内网B&#xff0c;C网段&#xff0c;同时B、C网段内网用户可以访问A段的94、95、96服务器&#xff1b; 也就是PC4\…...

yml和xml分别代表什么

YML 和 XML 是两种不同的数据序列化格式&#xff0c;它们在软件开发和数据交换中有着广泛的应用&#xff1a; YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写&#xff0c;特别适合于配置文件。YAML 使用缩进来表示数…...

Qt多线程编程

在Qt中&#xff0c;多线程编程是一个常见的需求&#xff0c;特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务&#xff0c;从而提高性能和响应速度。Qt提供了一套完善的多线程支持&#xff0c;包括线程类&#xff08;QThrea…...

springboot438校园志愿者管理系统(论文+源码)_kaic

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

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镜像都不能访问&#xff0c;目前亲测可用的docker镜像可用&#xff0c;并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表&#xff0c;只能手动查询索引目录&#xff08;解决方案在最后&#xff09;。 linux服务器vim打开镜像文件daemon.json vim /e…...

力扣——322. 零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...

.Net_比对Json文件是否一致

简介 该方法用于比较两个Json文件是否完全一致&#xff0c;仅考虑内容若两个文件中的内容只是顺序不一致&#xff0c;内容是一样的&#xff0c;那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…...

科研笔记:ARR 与 ACL rolling

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

【2024】Camunda常用功能基本详细介绍和使用-上 (1)

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

用人话讲计算机:Python篇!(十二)正则运算+re模块

目录 一、正则表达式 &#xff08;1&#xff09;什么是正则表达式 &#xff08;2&#xff09;它的结构及使用 示例&#xff1a; 1.字符 . &#xff08;←这里有个小点哦&#xff09; 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d &#xff08;3&#xff09;补充&#xff…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

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

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...