当前位置: 首页 > 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…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

ubuntu清理垃圾

windows和ubuntu 双系统&#xff0c;ubuntu 150GB&#xff0c;开发用&#xff0c;基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小&#xff0c;发现 .cache 有26GB&#xff0c;.local 有几个GB&am…...

学习 Hooks【Plan - June - Week 2】

一、React API React 提供了丰富的核心 API&#xff0c;用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素&#xff0c;JSX 会被编译成该函数…...

统计按位或能得到最大值的子集数目

我们先来看题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出 nums 子集 按位或 可能得到的 最大值 &#xff0c;并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素&#xff08;或不删除&#xff09;得到&#xff0c;…...

TMC2226超静音步进电机驱动控制模块

目前已经使用TMC2226量产超过20K,发现在静音方面做的还是很不错。 一、TMC2226管脚定义说明 二、原理图及下载地址 一、TMC2226管脚定义说明 引脚编号类型功能OB11电机线圈 B 输出 1BRB2线圈 B 的检测电阻连接端。将检测电阻靠近该引脚连接到地。使用内部检测电阻时,将此引…...