10 个高级 Python 面试问题

news2025/4/8 23:05:38

 

随着 Python 最近变得越来越流行,你们中的许多人可能正在接受与 Python 打交道的技术面试。在这篇文章中,我将列出十个高级 Python 面试问题和答案。

这些内容可能会令人困惑,并且针对的是中级开发人员,他们需要对 Python 作为一种语言及其背后的工作原理有很好的理解。

1、Nolocal 和 Global 关键字的用途是什么?

这两个关键字用于更改先前声明的变量的范围。nolocal当您需要访问嵌套函数中的变量时经常使用nolocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。

def func1():
    x = 5
    def func2():
        nolocal x
        print(x)
    func2()

global是一个更直接的指令。它使先前声明的变量成为全局变量。例如,考虑这段代码:

x = 5
def func1():
    print(x)
func1()
>>>5

由于x在函数调用之前声明,因此func1可以访问它。但是,如果您尝试更改它:

x = 5
def func2():
    x += 3
func2()
>>>UnboundLocalError: 赋值前引用了局部变量“c”

为了让它工作,我们需要指出x我们指的是全局变量x

x = 5
def func2():
    global x
    x += 3
func2()

2、class方法和静态方法有什么区别?

它们都定义了一个class方法,可以在不实例化class的对象的情况下调用该方法。唯一的区别在于他们的签名:

A class:
    @staticmethod
    def func1():
        pass
    @classmethod
    def func2(cls):
        pass

如您所见,classmethod接受一个隐式参数cls,该参数将被设置为classA本身。一个常见的用例classmethod是创建替代的可继承构造函数。

3、什么是 GIL 以及绕过它的一些方法是什么?

GIL 代表全局解释器锁,它是 Python 用于并发的一种机制。它内置于 Python 系统的深处,目前无法摆脱它。GIL 的主要缺点是它使线程不是真正的并发。它锁定了解释器,即使看起来你正在使用线程,但它们并不是同时执行的,从而导致性能损失。这里有一些绕过它的方法:

  • multiprocessing模块。它允许您生成新的 Python 进程并以与管理线程相同的方式管理它们。
  • asyncio模块。它有效地启用了异步编程并添加了async/await语法。虽然它没有解决 GIL 问题,但它会使代码方式更易读和更清晰。
  • Stackless_Python这是一个没有 GIL 的 Python 分支。它最显着的用途是作为 EVE Online 游戏的后端。

3、什么是metaclass以及何时使用它们?

metaclass是class的class。当继承过于混乱时,元class可以指定许多class共有的某些行为。一种常见的元class是ABCMeta,用于创建抽象class。

Python 中的元class和元编程是一个很大的话题。如果您对此感兴趣,请务必相关信息。

4、什么是class型注解?什么是通用class型注释?

虽然 Python 是一种动态class型语言,但为了清晰起见,有一种方法可以对class型进行注释。这些是内置class型:

  • int
  • float
  • bool
  • str
  • bytes

typing模块提供了复杂class型:

  • List
  • Set
  • Dict
  • Tuple
  • Optional
  • ETC。

以下是如何使用class型注释定义函数:

def func1(x: int, y: str) -> bool:
    return False

泛型class型注解是将另一种class型作为参数的注解,允许你指定复杂的逻辑:

  • List[int]
  • Optional[List[int]]
  • Tuple[bool]

请注意,这些仅用于警告和静态class型检查。您将无法在运行时保证这些class型。

5、什么是生成器函数?编写您自己的范围版本

生成器函数是可以在return值后暂停执行的函数,以便稍后恢复执行并return另一个值。这是pass关键字实现的yield,您使用它代替 return。您使用过的最常见的生成器函数是range. 这是实现它的一种方法(仅适用于积极的步骤,我将把它留作练习以制作支持消极步骤的方法):

def range(start, end, step):
    cur = start
    while cur > end:
        yield cur
        cur += step

6、什么是 Python 中的装饰器?

Python 中的装饰器用于修改函数的行为。例如,如果您想记录对一组特定函数的所有调用、缓存其参数和return值、执行基准测试等。

装饰器以符号为前缀@,并放置在函数声明之前:

@my_decorator
def func1():
    pass

7、什么是 Python 中的 Pickling 和 Unpickling?

序列化的 Python 方式. Pickling 允许您将对象序列化为字符串(或您选择的任何其他内容),以便持久存储或pass网络发送。Unpickling 是从字符串中恢复原始对象的过程。Pickling 是不安全的。只从受信任的来源中提取对象。

下面是你将如何 pickle 一个基本的数据结构:

import pickle
cars = {"Subaru": "best car", "Toyota": "no i am the best car"} cars_serialized = pickle.dumps(cars)
# cars_serialized 是一个字节串new_cars = pickle.loads(cars_serialized)

8、什么是*argsPython**kwargs函数?

这些与拆包密切相关。如果你放入*args函数的参数列表,所有未命名的参数都将存储在args数组中。**kwargs工作方式相同,但对于命名参数:

def func1(*args, **kwargs):
    print(args)
    print(kwargs)
func1(1, 'abc', lol='lmao')
> [1, 'abc']
> {"lol": "lmao" }

9、文件有什么.pyc用?

.pyc.class文件包含 Python 字节码,与Java 中的文件相同。不过,Python 仍然被认为是一种解释型语言,因为这个编译阶段发生在您运行程序时,而在 Java 中,它们是明确分开的。

10、你如何在 Python 中定义抽象class?

ABC您从模块继承来定义抽象 abc

from abc import ABC,abstractmethod
class AbstractCar(ABC):
    @abstractmethod
    def drive(self):
        pass

要实现该class,只需继承它:

class 红旗汽车(AbstractCar):

      def drive(self):

          print('go go go')

if __name__ == '__main__':

      a = 红旗汽车()

      a.drive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RB-PEG-COOH,罗丹明聚乙二醇羧基化学试剂简介;RhodamineB-PEG-acid

RB-PG-COOH, 罗丹明聚乙二醇羧基 中文名称:罗丹明-聚乙二醇-羧基 英文名称:RhodamineB-PEG-acid RB-PEG-COOH 性状:固体或粘性液体,取决于分子量 溶剂:溶于水和DCM、DMF、DMSO等常规性有机溶剂 分子量&#xff1…

归排、计排深度理解

归并排序:是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法&#…

ICMP隧道技术实现防火墙穿透

1.在mac os的虚拟机里准备三台kali 三台主机ip地址分别是 192.168.1.15,192.168.1.16,192.168.1.17, 为方便描述 依次把他们暂且命名为主机A,主机B,主机C 2.在主机C 上打开终端,输入 cd /usr/local/src 然后新建一个hello.txt 文…

最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到

技术选型 1,前端 小程序原生MINA框架 css JavaScript Wxml 2,管理后台 云开发Cms内容管理系统 web网页 3,数据后台 小程序云开发 云函数 云开发数据库(基于MongoDB) 云存储 4,人脸识别算法 基于百度…

xxl-job定时任务调度中心的配置以及整合到自己的项目中实现远程调用

目录 前言: xxl-job配置与启动: xxl-job-admin: xxl-job-execultor--sample-springboot: 启动任务调度中心: ​编辑 调用定时任务: ​编辑 在自己的项目中配置xxl-job: 项目结构: ​编辑 AdUp…

【CSS】更改用户界面样式 ② ( 取消轮廓线 outline | 取消轮廓线设置方式 outline: 0; | 代码示例 )

文章目录一、更改轮廓线 outline二、轮廓线代码示例三、取消轮廓线代码示例一、更改轮廓线 outline 轮廓线 是 元素 边框 外面 的一条线 , 其作用是 选中后突出元素 ; 一般情况下都会去掉 轮廓线 显示 ; outline 样式后可设置 1 ~ 3 个参数 , 按照顺序分别是 : outline-color…

JavaScript-DOM基础

DOM介绍 事件介绍 文档加载 DOM查询 DOM介绍 DOM&#xff0c;全称Document Object Model文档对象模型。浏览器已经提供了文档节点对象 时window属性&#xff0c;可以在页面中直接使用&#xff08;document文档节点代表整个网页&#xff09; <button id "btn&qu…

【Linux 裸机篇(三)】I.MX6ULL 启动方式

目录一、启动方式选择1. 串行下载2. 内部 BOOT 模式2.1 BOOT ROM 初始化内容2.2 启动设备二、镜像烧写1. IVT2. Boot data3. DCD数据一、启动方式选择 I.MX6ULL 芯片上电后&#xff0c;芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。BOOT_MODE[1:0]的值是可以改变的&#…

【ONE·C++ || list (一)】

总言 主要介绍list的基本函数使用及部分函数接口模拟实现(搭框架)。 文章目录总言1、常用接口与举例演示1.1、接口总览1.2、部分例子1.2.1、头删、头插、尾删、尾插、遍历1.2.2、pos插入删除、迭代器失效问题1.2.3、一些相对陌生接口简介&#xff08;std::sort和list::sort比较…

D. Captain Flint and Treasure(拓扑排序 + 贪心)

Problem - D - Codeforces 芬特队长参与了另一个寻宝活动&#xff0c;但只发现了一个奇怪的问题。这个问题可能与宝藏的位置有关&#xff0c;也可能不是。这就是为什么弗林特船长决定把解决问题的工作交给他的船员&#xff0c;并提供了一个高得离谱的奖励:休息一天。问题本身听…

【日常】我的扬马最后一小时

文章目录1 Approxmation, Regularization and Relaxation赛前风波惨痛的主场之战释然的痛苦之路后记1 Approxmation, Regularization and Relaxation 在算法理论研究中&#xff0c;为了使得降低问题的求解复杂度&#xff0c;常常会选择牺牲算法的选择求解精度&#xff0c;这种…

Redis-----什么是Redis?

什么是Redis&#xff1f; redis是一个基于内存的key-value结构数据库。 基于内存存储&#xff0c;读写性能高适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09;企业应用广泛 Redis入门 redis简介 redis是一个开源的内存中的数据结构存储系统&#xff0c;数据库…

ASP宿舍管理系统设计与实现

学生宿舍的管理工作也将成为一项十分繁重的工作&#xff0c;建立一个学生宿舍管理系统是非常必要的&#xff0c;可行的。计算机能够极大地提高学生宿舍管理的办事效率&#xff0c;学校要想与先进科学技术接轨&#xff0c;就得科学化、正规化的进行管理。随着社会信息化步伐的加…

使用Unity模拟人群疏散的资料整理

本文地址&#xff1a;https://blog.csdn.net/t163361/article/details/130136283 UnityDemo Evacuation Simulator Unity_EvacuationSimulator Crowd-Simulation-and-Visualization-in-Unity Multi-agent-simulation-program-for-evacuation Crowd-Evacuation-Simulatio…

Android SQLite插入float类型浮点数小数位数异常(四舍五入过的两位小数变成13位小数)的原因和解决方法

浮点数异常截图&#xff1a; 说明&#xff1a; 正常保留两位小数并正确插入的记录是通过db.execSQL(sql);方法插入的&#xff0c;而浮点数异常的是通过ContentValues db.insert() 方式插入的,可以发现问题出在db.insert()方法上&#xff0c;我又试过在put的时候直接输入类似16…

zabbix代理服务器部署

分布式监控的作用&#xff1a; ●分担 server 的集中式压力 ●解决多机房之间的网络延时问题 部署zabbix代理服务器 1、关闭防火墙、修改主机名 systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-proxy su 2、设置zabbix的下载源&#xff0c;按…

7.2 模拟乘法器及其在运算电路中的应用

模拟乘法器是实现两个模拟量相乘的非线性电子器件&#xff0c;利用它可以方便地实现乘、除、乘方和开方运算电路。此外&#xff0c;由于它还能广泛地应用于广播电视、通讯、仪表和自动控制系统&#xff0c;进行模拟信号的处理&#xff0c;所以发展很快&#xff0c;称为模拟集成…

【微信小程序-原生开发】添加自定义图标(以使用阿里图标库为例)

方式一 &#xff1a; 下载svg导入 优点&#xff1a;操作方便&#xff0c;支持多彩图标缺点&#xff1a;会增加源代码大小 下载 svg 格式的图标图片&#xff0c;放入源码中使用 小程序项目中的路径为 assets\icon\美食.svg 使用时-代码范例 <image class"imgIcon"…

【JSP学习笔记】3.JSP 指令及动作元素

前言 本章介绍JSP的指令和动作元素。 JSP 指令 JSP指令用来设置整个JSP页面相关的属性&#xff0c;如网页的编码方式和脚本语言。 语法格式如下&#xff1a; <% directive attribute"value" %>指令可以有很多个属性&#xff0c;它们以键值对的形式存在&am…

属性文法和语法制导翻译

前言 前面通过词法分析&#xff0c;语法分析&#xff0c;DFA最后接受了一个输入实际上是理解了某一句编程语句&#xff0c;编译器的角色是将高级程序语言编译&#xff08;翻译&#xff09;为汇编代码&#xff0c;通过词法、语法分析编译器可以理解高级程序语言了&#xff0c;那…