Python:超级大全网上面试题搜集整理(二)

news/2024/7/8 2:06:10

转载鸣谢:  python面试题汇总(史上最全)_编程ID的博客-CSDN博客

转载鸣谢: Python常考基础面试题_python面试题_袁袁袁袁满的博客-CSDN博客

目录

1.什么是猴子补丁

 2.列表和元素的不同之处

3.python的负索引?

4.随机打乱表中元素

5.python是否区分大小写

6.exec,nonlocal,print是python关键词吗?

7.print可以输出到文件吗?

8.python中istitle函数

9.阐述一下闭包

10.python中的幂运算怎么表达

11.python中的逻辑运算符

12.python中的成员运算符

13.python中如何实现多线程?

14.python继承关系

15.python2和3的继承不同点?

16.Python中的内存管理

17.详细描述一下python的垃圾回收机制

 18.python退出时是否会释放所有的内存分配?

19.dir()函数都返回对象中的哪些成员/python的魔法函数?

20.简单聊一聊python的变量

21.嵌套函数和闭包函数有什么不同


1.什么是猴子补丁

在运行python代码时动态修改类和模块的元素,使其在源代码不变的情况下能够达到强加的输出效果

详情请参考:python的猴子补丁(Monkey Patching)_phoenix_wangxd的博客-CSDN博客

 2.列表和元素的不同之处

列表可变,元祖不可变

详情请阅读:Python元组和列表的区别

3.python的负索引?

从右边开始查询的索引,常用语列表的切片

4.随机打乱表中元素

shuffle() 方法将序列的所有元素随机排序 , shuffle 洗牌的意思

import random
random.shuffle(lst)

5.python是否区分大小写

区分

6.exec,nonlocal,print是python关键词吗?

是的

nonlocal :非局部声明变量 详解请跳转:【python】nonlocal的详解_Zack1st_diu的博客-CSDN博客

exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码。exec 返回值永远为 None。详情请跳转:Python3 exec 函数 | 菜鸟教程

7.print可以输出到文件吗?

可以:print(value...sep=' ', end='\n', file=sys.stdout, flush=False)

默认是标准输出,可以修改到指定文件

8.python中istitle函数

Python istitle() 方法检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

9.阐述一下闭包

闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继续执行调用。详情请见:什么是闭包,Python闭包(初学者必读)

10.python中的幂运算怎么表达

**

11.python中的逻辑运算符

and 、or、 not

12.python中的成员运算符

in  、 not in

13.python中如何实现多线程?

线程是轻量级的进程,多线程允许一次执行多个线程,

但是python有GIL(全局解释锁),确保一次只运行单个线程

GIL锁会在线程之间传递,会增加额外的执行开销。

与线程相关的概念包括不限于:

计算密集型程序、IO密集型程序、单核处理器、多核处理器、调度、进程、资源、全局变量,死锁,并行,并发、解释器、内存管理,同步,数据混乱

详情跳转:

python实现多线程_python多线程实现_youthlost的博客-CSDN博客

python全局解释器GIL锁(-死锁)

JAVA——死锁详解_java 死锁_一个小菜只因的博客-CSDN博客

哲学家就餐问题:所有的哲学家都只会在思考和进餐两种行为间交替。哲学家只有同时拿到左边和右边的叉子才能吃到面,而同一根叉子在同一时间只能被一个哲学家使用。每个哲学家吃完面后都需要把叉子放回桌面以供其他哲学家吃面。只要条件允许,哲学家可以拿起左边或者右边的叉子,但在没有同时拿到左右叉子时不能进食。

14.python继承关系

单继承:继承单个类,

多重继承:继承自多个基类

多级继承:基类继承自另一个基类

分层继承:多个子类继承自同一个基类

混合继承:两种或两种以上继承类型的组合

15.python2和3的继承不同点?

经典类和新式类

super是否直接使用

PEP8规范:新式类的跨环境,都需要加上object这个继承

可参考:

python2和python3中的继承的不同之处 - 爱码网

python2和python3的继承方式的不同,广度优先和深度有限_weixin_33704591的博客-CSDN博客

16.Python中的内存管理

私有堆内存空间来放置所有对象和数据结构,我们无法访问,只有解释器来管理它

可以通过一些工具控制内存分配,创建对象(变量、函数、对象)之后,cpython会在内存中为其分配地址,python有一个id()函数,他可以返回对象的身份,也就是内存地址,是一个唯一的整数表示。

在定义变量时,其名字和变量值都是需要存储的,分别对应内存的两块区域:堆区和栈区

定义变量:

1.变量名与变量值的的内存地址的关联关系存在于栈区

2.变量值存在于堆区,内存管理回收的则是堆区的内容

在这里插入图片描述

  图片来源于:python的内存划分_python内存分配_佐杰的博客-CSDN博客 

直接引用、间接引用、循环引用请参考:python的内存划分_python内存分配_佐杰的博客-CSDN博客

跟踪内存:tracemalloc工具是一个用于对python已申请内存块进行debug的工具

1.回溯对象内存分配的位置

2.按文件、按行统计python的内存块分配情况:内存块总大小,数量以及块平均大小

3.对比两个内存快照的差异,以便排查内存泄漏

        关于tracemalloc请跳转:tracemalloc --- 跟踪内存分配 — Python 3.12.0a7 文档

详情跳转:

python的内存划分_python内存分配_佐杰的博客-CSDN博客

详解python的内存分配机制_python_脚本之家

tracemalloc --- 跟踪内存分配 — Python 3.12.0a7 文档

17.详细描述一下python的垃圾回收机制

对象的引用计数(需要考虑循环引用问题)、标记清除、隔代回收

引用计数获取测试:Python: 问题(1)--getrefcount在不同环境中的引用计数表现_千码君2016的博客-CSDN博客

1.堆内存:存放变量和内存地址

2.栈内存:存放值

3.内存溢出:当内存中存在大量的相互引用计数时,会占用大部分的内存,当新的变量申请时不会再开辟新的内存

4.GC效率:在垃圾回收时,python不会执行其他的任务,频繁的垃圾回收会大大降低python的工作效率,原因是GIL的存在,当GC运行时,会抢占python解释器,其他线程处于阻塞状态,会降低python的工作效率,几个小时运行一次就可以了

5.GC的启动:当运行python时,会记录分配对象和取消对象的次数,当两者的差值到达某个阈值(默认700)时,垃圾回收才会启动

6.GC的触发:主动调用gc.collect(),gc达到阈值自动触发,程序退出时(一次性全部退出)

7.标记清除:当程序可用的内存空间被耗尽时,就会停止整个程序,但后进行两项工作标记和清除

标记清除算法就是一种基于追踪回收技术引用的垃圾回收算法,它分为两个阶段标记和清除

标记:GC会把所有对象(活动且有引用的)打上标记

回收:把没有标记的对象(非活动对象)进行回收

8.分代回收:因为标记清除的效率不高,清除非活动对象前它必须顺序扫描整个内存,为了解决这个问题,引入了隔代回收,分代回收解决了python什么时候进行扫描的问题,将扫描任务分为三级降低扫描的工作量,提高效率

0代:0代中的对象个数达到700个(默认阈值),扫描一次

1代:0代扫描10次,则1代扫描1次

2代:1代扫描10次,则2代扫描1次

9.Python的内存池

python提供了对内存的垃圾回收机制,但是它将不用的内存放到内存池而不是返回给操作系统

对于python对象,python存在独立内存池的情况

字符串长度为0或者1,符合标识符的字符串(只包含字符数字下划线),字符串只在编译时进行驻留,而非运行时,【-5,256之间的整数数字】

在这里插入图片描述

 10.优化内存管理

1.手动垃圾回收,先调用del a,再调用gc.collect()嵌套的循环引用删除不了

 

2.调高垃圾回收的阈值,gc.set_threshold(800,20,20)

3.避免循环引用

首先什么是循环引用?

ImportError: cannot import name 'A' from partially initialized module 'memory.A' (most likely due to a circular import) 

 详情参考:python 循环引用的解决方法_loveysuxin的博客-CSDN博客

以上出自:Python是如何进行内存管理的?(图文讲解)_python 内存管理_敲代码敲到头发茂密的博客-CSDN博客

 18.python退出时是否会释放所有的内存分配?

具有对象循环引用或者全局命名空间引用的变量,退出时不会释放

不会释放C库保留的部分内容

19.dir()函数都返回对象中的哪些成员/python的魔法函数?

__annotations__ 了解请跳转:详解Python中函数和模块的特殊属性__annotations___dongfuguo的博客-CSDN博客

 Python annotation特性解析___annotations___求知向道的博客-CSDN博客

__radd__了解请跳转:

Python中 __radd__ 等运算符的变更 - 简书

Python中的__radd__函数和return语句(__radd__ function in python and return statement)_电脑培训

__closure__请跳转:https://www.cnblogs.com/cc-world/p/14008323.html

参考:

Python中的魔法函数总结整理_51CTO博客_python魔法函数

python内置魔法方法 - 百度文库

20.简单聊一聊python的变量

变量类型:

python是一个动态类型的语言,也是强类型语言。使用变量之前不需要声明变量类型,直接赋值即可,变量的初始化类型取决于等号右侧表达式的值的类型。创建之后变量的类型也可以随时发生变化,但在任何时刻,每一个变量都有一个确定类型。

同理,在定义函数和类的方法时,也不需要声明形参类型,完全取决于实参类型

标注形参类型、标注返回值类型、在实际调用函数时,即使实参不符合形参的类型标注,一样能够正常传递

以上参考鸣谢:https://www.cnblogs.com/missarain/articles/16071053.html

变量赋值特殊形式:

        a = b = c = "11111"

        a, b, c = "aaa", "bbb", "ccc"

 以上参考:详解python的变量_python变量_程序员秃秃的博客-CSDN博客

a,b = b,a

是不是很简洁?不得不想起那句:人生苦短,我用python

python中变量值交换的三种方法_python交换a和b的值_诗酒趁年华~的博客-CSDN博客

其余可参考: Python变量 - Python教程 - C语言网

21.嵌套函数和闭包函数有什么不同

闭包函数返回的是一个函数,且只能返回一个函数

 也可跳转继续了解:理解Python闭包 - 知乎

 嵌套函数:python-嵌套函数讲解_python 嵌套函数_愈努力俞幸运的博客-CSDN博客


http://lihuaxi.xjx100.cn/news/1007403.html

相关文章

【Python】lambda表达式、map函数、reduce函数、filter函数

一、lambda表达式 简单来说,所以只用一行或者一句话来表达的函数就可以用lambda表达式,也称为lambda函数; 【举个栗子】 def f(x):return x * xf(3) 上面的函数的含义是:给函数f传递一个参数x,它会返回x*x&#xff…

Unity环境下的常用数值静态引用

1、三角函数 using UnityEngine;public class TriFun {static float[] _Sin32s;public static float[] Sin32s{get{if (_Sin32s null || _Sin32s.Length 0){_Sin32s new float[32];float angleDeta Mathf.PI / 16;_Sin32s[0] 0;_Sin32s[8] 1;_Sin32s[16] 0;_Sin32s[24]…

NeRF代码学习

学习nerf_pytorch项目代码,以及pytorch_lighting形式代码, 首先需要读取数据,将数据输入神经网络进行训练(包括生成编码、生成光线、计算密度颜色、体渲染步骤),将数据输出 1、数据集读取 代码中给出的样…

【MySQL数据库原理】MySQL Community安装与配置

目录 1、介绍、安装与配置数据库2、操作MySQL数据库3、MySQL数据库原理1、介绍、安装与配置数据库 下载安装包:https://download.csdn.net/download/weixin_41194129/87672588 MySQL Installer - Community 是一个用于安装、配置和管理 MySQL 服务器的官方工具。以下是使用 …

VSCode+PyQt之Python界面编写

环境配置 1、python3.9 2、安装库 pip install PyQt5 pip install PyQt5-tools3、选择python解释器 4、在VSCode里下载并安装PYQT Integration 5、配置pyqt integration 5.1 将下面改为:D:\ProgramFiles\Python39\Scripts\pyuic5.exe 5.2 将下面的改为&#xff…

IEEE754单精度浮点数与十进制相互转化

什么是IEEE754单精度浮点数 IEEE 754单精度浮点数格式使用32位二进制表示,其中1位用于符号位,8位用于指数,23位用于尾数。 以下是IEEE 754单精度浮点数的详细格式: SExpFrac18 bits23 bits 其中,S表示符号位&#x…

食堂总是拥挤不堪?解决用餐拥挤,教你一招

随着近几年科技的快速发展,行业里出现了很多新的名词,比如智慧社区、智慧旅游、智慧建筑,那么智慧食堂是什么呢?它又是如何实现全自助、全智能消费? 在先进的智能技术以及市场需求带动下,智慧食堂经历了由传…

【案例教程】大气颗粒物PMF源解析实践技术

颗粒物污染不仅对气候和环境有重要影响,而且对人体健康有严重损害,尤其在一些重污染天气,如灰霾和沙尘暴等。为了高效、精准地治理区域大气颗粒物污染,首先需要了解颗粒物的来源。因此,颗粒物源解析成为目前解决大气颗…