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

下载本文档

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

文档简介

Python基础高频面试题及答案(真实面试版)一、基础语法核心题1、Python中可变类型和不可变类型有哪些?区别是什么?答案:不可变类型:整数、浮点数、字符串、元组、布尔值。可变类型:列表、字典、集合。核心区别:不可变类型创建后,内存里的值不能修改,重新赋值是开辟新内存空间;可变类型可以直接在原内存地址上修改内容,不会生成新对象。举个例子:字符串不能直接改某个字符,但是列表可以直接修改索引对应的元素。2、解释一下Python中的深浅拷贝答案:浅拷贝:只拷贝外层对象,里面的子对象还是共用同一个内存地址。修改原数据里的子元素,拷贝后的数据会跟着变。常用方法:copy()、切片、dict.copy()。深拷贝:完全拷贝整个对象,包括所有内层嵌套数据,原数据和拷贝后的数据完全独立,互不影响。需要导入copy模块的deepcopy方法。简单总结:单层数据,深浅拷贝没区别;嵌套数据必须用深拷贝。3、==和is的区别?答案:==是判断两个对象的值是否相等,只比内容。is是判断两个对象的内存地址是否一致,比的是不是同一个对象。补充:Python有小整数缓存,-5~256之间的整数,值相等内存地址就一样,所以aisb会返回True,超出这个范围就不成立。4、Python垃圾回收机制了解吗?答案:Python主要靠引用计数为主,标记清除、分代回收为辅。1、引用计数:每个对象有引用计数器,有人引用就+1,引用失效就-1,计数器为0就直接回收内存。优点是实时,缺点是解决不了循环引用。2、标记清除:专门解决循环引用问题,定期扫描内存,标记无效对象并清除。3、分代回收:把对象分三代,存活越久的对象越稳定,扫描频率越低,提升回收效率。5、pass、continue、break的区别?答案:pass:空语句,占位用,不执行任何操作,保证语法不报错。continue:跳出本次循环,直接进入下一次循环,不会终止整个循环。break:直接终止当前所在的整个循环,跳出循环体。二、列表、字典、字符串高频题6、列表和元组的区别?答案:1、列表可变,元组不可变;列表可以增删改查,元组创建后不能修改。2、列表用[],元组用()。3、元组性能更高、占用内存更小,安全性更好,适合存固定不变的数据;列表适合频繁修改的数据。4、元组可以作为字典的key,列表不行。7、字典的key有什么要求?为什么列表不能当key?答案:字典key必须是不可变、可哈希的数据类型,比如字符串、数字、元组。列表是可变类型,内容可以随时修改,哈希值会变化,字典无法通过key定位存储位置,所以不能当key。8、字典get方法和直接取值的区别?答案:直接取值:字典[key],如果key不存在,直接报错。get方法:dict.get(key,默认值),key不存在不会报错,返回None或者自己设置的默认值,日常开发更常用,容错性更高。9、字符串拼接有几种方式?哪种效率最高?答案:常见方式:+拼接、%格式化、format、f-string、join方法。效率最高的是join,尤其是大量字符串拼接的时候。因为字符串不可变,+拼接会不断生成新字符串,产生大量内存垃圾;join是一次性拼接,开销更小。日常简单场景优先用f-string,语法简洁可读性强。三、函数与高阶特性10、局部变量和全局变量的区别?global关键字作用?答案:全局变量:定义在函数外部,整个文件都能访问。局部变量:定义在函数内部,只能在当前函数内使用,函数执行结束就销毁。如果想在函数内部修改全局变量,必须用global声明,否则会默认创建一个新的局部变量。11、参数*args和**kwargs作用是什么?答案:*args:接收任意多个位置参数,最终打包成元组。**kwargs:接收任意多个关键字参数,最终打包成字典。主要用于不定长参数场景,比如封装通用函数、装饰器,适配任意数量的参数。12、什么是闭包?闭包的作用?答案:简单说:嵌套函数中,内层函数引用了外层函数的局部变量,外层函数返回内层函数,这个内层函数就是闭包。作用:可以保存外层函数的变量状态,变量不会随着外层函数执行结束而销毁,常用于装饰器、数据缓存。13、装饰器的作用和执行原理?答案:装饰器本质是闭包,作用是不修改原函数代码、不修改原函数调用方式,给函数新增功能,比如日志记录、权限校验、计时、缓存。执行原理:加载阶段先装饰,运行阶段再执行原函数。多个装饰器叠加时,装饰顺序从上到下,执行顺序从下到上。四、异常、文件与模块14、try-except执行流程?else和finally区别?答案:流程:先执行try里的代码,报错就走except捕获异常,不报错就走else,最后无论是否报错,都会执行finally。else:try代码无异常才会执行。finally:无论成功失败、是否return都会执行,一般用来关闭文件、释放资源。15、open打开文件的几种模式?r、w、a、r+、w+、a+区别?答案:r:只读,文件不存在报错。w:清空写入,文件不存在则创建,存在就清空原有内容。a:追加写入,不会清空内容,在末尾新增,文件不存在则创建。r+:可读可写,不会清空文件,从光标位置覆盖写入。w+:可读可写,直接清空原有内容。a+:可读可追加,光标默认在文件末尾。16、import导入模块的路径顺序?答案:1、先从当前脚本所在目录查找2、再去Python环境变量sys.path路径查找3、最后查找系统内置模块如果自己的脚本和内置模块重名,会优先导入本地脚本,导致内置模块失效,开发中一定要避免模块名和内置模块重名。五、高频手写代码面试题(附标准答案)17、手写代码:列表去重,保留原有顺序答案:PlainText

#兼容所有Python版本

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

new_lst=[]

foriinlst:

ifinotinnew_lst:

new_lst.append(i)

print(new_lst)Python3.7+字典有序,也可以用:list(dict.fromkeys(lst))18、手写代码:反转字符串答案:PlainText

s="python"

#最简写法

res=s[::-1]

print(res)19、手写装饰器(统计函数执行时间)答案:PlainText

importtime

defrun_time(func):

defwrapper(*args,**kwargs):

start=time.time()

res=func(*args,**kwargs)

end=time.time()

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

returnres

returnwrapper

@run_time

deftest():

foriinrange(1000000):

pass

test()20、一行代码实现1-100求和答案:PlainText

sum(range(1,101))六、易踩坑面试陷阱题21、默认参数陷阱为什么不能用可变类型?答案:默认参数在函数定义阶段就已经创建,不是每次调用都新建。如果默认参数是列表、字典等可变类型,多次调用函数会共用同一个对象,导致数据累加错乱。正确写法:默认值设为None,函数内部再初始化可变对象。22、for循环和while循环的适用场景?答案:for循环:适合已知循环

温馨提示

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

最新文档

评论

0/150

提交评论