Python高频面试题及详细答案(真实职场版)_第1页
Python高频面试题及详细答案(真实职场版)_第2页
Python高频面试题及详细答案(真实职场版)_第3页
Python高频面试题及详细答案(真实职场版)_第4页
Python高频面试题及详细答案(真实职场版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python高频面试题及详细答案(真实职场版)一、Python基础语法面试题1、简述Python中&和and的区别?答案:这是新手最容易踩的坑,两者完全不是一个东西:1、&是位运算,针对二进制数字计算,优先级比加减乘除高;and是逻辑运算,判断真假,优先级极低。2、运算规则不同:&两边必须是数字,按位与运算;and两边是任意表达式,判断布尔值。3、返回值不同:&返回计算后的数字;and返回最后判定的对象。举个实操例子:3&1#结果是1(二进制位运算)3and1#结果是1(前面为真,返回后面的值)0and5#结果是0(前面为假,直接返回前面)2、Python中is和==的区别?答案:一句话总结:==比数值,is比内存地址。1、==是判断两个对象的值是否相等,调用的是__eq__方法;2、is是判断两个对象是不是同一个内存地址,完全是同一个东西;3、补充高频坑点:Python有小整数缓存(-5~256),这个区间的整数,值相等则地址相同,超出区间则不一样。实操示例:a=257b=257print(a==b)#True,值一样print(aisb)#False,内存地址不一样3、解释Python中的缩进规则,为什么不用大括号?答案:Python是强制缩进语言,用缩进层级区分代码块(if、for、def、class),替代了Java/C++的大括号。1、缩进统一用4个空格,禁止空格和制表符混用,会直接报错;2、缩进层级必须一致,同一代码块缩进量相同;3、优点:代码简洁、可读性极强;缺点:格式容错率低,写错缩进直接抛异常。二、数据类型高频面试题1、列表、元组、字典、集合的区别和使用场景?答案:1、列表list:有序、可修改、允许重复,日常存储有序数据、遍历数据用的最多;2、元组tuple:有序、不可修改、允许重复,定义后不能增删改,适合存固定数据(配置、坐标),可作为字典key;3、字典dict:无序(3.7+有序)、键唯一、可修改,键必须不可变,适合存键值对映射数据;4、集合set:无序、元素唯一、可修改,自动去重,适合去重、交集、并集、差集运算。2、元组到底能不能修改?为什么说元组是不可变类型?答案:很多人搞错这个点:元组本身不可变,但如果元组里嵌套可变对象,内部数据可以改。1、元组的不可变,指的是元素的内存地址不可变,不能增删、替换元素;2、如果元组里存了列表,列表内部的数据可以修改,因为列表的内存地址没变;示例:t=(1,2,[3,4])t[2].append(5)#合法,不会报错t[0]=3#报错,不允许修改元组元素3、字典的键为什么不能是列表,可以是元组?答案:字典的键必须是可哈希(不可变)对象。1、列表是可变类型,内容可以随时修改,哈希值会变,字典无法定位存储位置,所以不能当键;2、纯元组是不可变类型,哈希值固定,稳定唯一,可以当键;3、拓展:字符串、数字、布尔值、None都可以当字典key。三、函数与参数面试题(超高频)1、讲讲Python函数的位置参数、关键字参数、默认参数、不定长参数答案:1、位置参数:按顺序传参,数量必须匹配,不能多也不能少;2、关键字参数:指定参数名传参,顺序可以随意,必须放在位置参数后面;3、默认参数:定义时给默认值,调用时不传参就用默认值;4、不定长参数:*args接收多个位置参数,打包成元组;**kwargs接收多个关键字参数,打包成字典。核心规则:位置参数>*args>默认参数>**kwargs2、默认参数的致命坑点是什么?怎么解决?答案:这是面试必问坑点:默认参数只会在函数定义时创建一次,不会每次调用重新生成,用可变对象(列表、字典)当默认参数会出bug。错误示例:deffunc(a=[]):a.append(1)print(a)连续调用会不断累加,不会清空列表。解决方案:默认参数设为None,函数内部手动创建可变对象deffunc(a=None):ifaisNone:a=[]a.append(1)print(a)3、global和nonlocal的区别?答案:1、global:用来在函数内部修改全局变量,直接声明外层全局变量;2、nonlocal:用来在嵌套内层函数修改外层函数的局部变量,只针对嵌套场景,不能改全局变量;3、核心区别:global管全局,nonlocal管外层局部,不跨全局。四、高阶函数与闭包、装饰器1、什么是闭包?闭包的作用?答案:闭包就是内层函数引用了外层函数的局部变量,外层函数返回内层函数的结构。特点:外层函数执行结束后,局部变量不会被销毁,会被内层函数持有。作用:1、保存函数运行状态;2、实现数据私有化;3、是装饰器的底层基础。2、讲讲装饰器的原理,以及为什么要用wraps?答案:装饰器本质是接收函数作为参数,返回新函数的闭包,可以在不修改原函数代码、不修改调用方式的前提下,给函数新增功能(日志、权限、计时、缓存)。不加functools.wraps的问题:装饰后的函数,函数名、注释、文档说明会被替换成装饰器内部函数的信息,导致原函数属性丢失。wraps的作用:复刻原函数的所有属性,保证函数信息不丢失,是开发中必须加的规范。五、面向对象OOP面试题1、简述Python面向对象的三大特性答案:1、封装:把属性和方法封装到类中,隐藏内部细节,只暴露对外接口,提高代码安全性;2、继承:子类继承父类的属性和方法,减少代码冗余,实现代码复用;支持单继承和多继承;3、多态:不同子类重写父类同一方法,调用同一个方法名,执行不同逻辑,提高代码扩展性。2、__init__和__new__的区别?答案:1、__new__是创建对象的方法,先执行,负责开辟内存空间,返回对象实例;2、__init__是初始化对象的方法,后执行,负责给对象赋值属性,无返回值;3、new是类方法,init是实例方法;想要实现单例模式,核心就是重写__new__方法。3、类属性和实例属性的区别?答案:1、类属性:写在类内部、方法外部,属于类所有,所有实例共享,修改类属性会影响所有对象;2、实例属性:在__init__中定义,self.xxx,只属于当前实例,互不影响;3、查询优先级:先找实例属性,再找类属性。六、Python高频坑点与实操面试题1、浅拷贝和深拷贝的区别?什么时候用?答案:1、直接赋值:完全共用同一个内存地址,改一个全变;2、浅拷贝copy:只拷贝顶层对象,内部嵌套的可变对象还是共用地址,单层数据用浅拷贝足够;3、深拷贝deepcopy:递归拷贝所有层级对象,完全独立,互不影响,多层嵌套数据必须用深拷贝。2、Python垃圾回收机制了解吗?答案:Python主要靠引用计数为主、标记清除+分代回收为辅的垃圾回收机制。1、引用计数:每个对象有引用计数器,计数为0直接回收,简单高效;2、弊端:无法解决循环引用问题;3、标记清除:专门解决循环引用垃圾;4、分代回收:把对象分为0、1、2三代,新对象频繁回收,老对象减少回收频率,提升效率。3、Python为什么运行速度比Java/C++慢?答案:1、Python是解释型语言,逐行解释执行,没有编译优化过程;2、动态类型,运行时才确定变量类型,额外消耗性能;3、GIL全局解释器锁,同一时刻一个进程只能有一个线程执行CPU任务,多线程无法利用多核;4、底层封装多,层级复杂,开销更大。4、讲讲GIL全局解释器锁答案:GIL是CPython的一把互斥锁,保证同一时刻只有一个线程执行字节码。1、导致Python多线程在CPU密集型任务下无法利用多核,并发效率低;2、IO密集型任务(爬虫、接口请求)不受影响,因为IO阻塞时会释放GIL;3、解决方案:CPU密集型用多进程,避开GIL限制。七、手写代码面试题(必考)1、手写一个简单装饰器(统计函数运行时间)答案:python

importtime

fromfunctoolsimportwraps

defcount_time(func):

@wraps(func)

defwrapper(*args,**kwargs):

start=time.time()

res=func(*args,**kwargs)

end=time.time()

print(f"函数{func.__name__}运行耗时:{end-start:.2f}s")

returnres

returnwrapper2、列表去重(保留原顺序)答案:python

lst=[1,2,2,3,1,4]

new_lst=[]

foriinlst:

ifinotinnew_lst:

new_lst.append(i)

print(new_lst)拓展:Python3.7+可直接用dict.fromkeys(lst).keys()去重且保序。3、手写冒泡排序答

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论