- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Python面试题及答案(实用版)
一、基础必问(考察核心语法理解)
问题:列表(list)和元组(tuple)的核心区别?分别适合什么场景?
答案:
最关键是可变性——列表是可变的(能增删改元素),元组不可变(创建后不能修改)。
场景:列表适合存动态数据(如用户输入的多条信息);元组适合存固定数据(如坐标(10,20)、接口返回的固定结构字段),且元组比列表更省内存,还能作为字典的键(列表不行,因为不可哈希)。
问题:装饰器是做什么的?写一个简单的计时装饰器(统计函数执行时间)。
答案:
装饰器能在不修改原函数代码的前提下,给函数添加额外功能(如计时、日志、权限校验),本质是“函数嵌套+闭包”。
示例代码:
importtime
deftimer(func):#接收被装饰的函数
defwrapper(*args,**kwargs):#接收原函数的参数
start=time.time()
result=func(*args,**kwargs)#执行原函数
end=time.time()
print(f{func.__name__}执行时间:{end-start:.2f}秒)
returnresult#返回原函数结果
returnwrapper
#使用装饰器
@timer
defadd(a,b):
time.sleep(1)
returna+b
add(2,3)#输出:add执行时间:1.00秒,返回5
问题:*args和**kwargs在函数参数里有什么用?怎么用?
答案:
都是用来处理“不确定数量的参数”:
*args:接收“位置参数”,打包成元组(tuple),比如deffunc(a,*args):,调用func(1,2,3)时,args=(2,3);
**kwargs:接收“关键字参数”,打包成字典(dict),比如deffunc(b,**kwargs):,调用func(1,x=2,y=3)时,kwargs={x:2,y:3};
注意顺序:必须是“普通参数→*args→**kwargs”,比如deffunc(a,*args,**kwargs):。
二、进阶原理(考察底层认知)
问题:GIL(全局解释器锁)是什么?对Python并发有什么影响?
答案:
GIL是CPython解释器的一个锁,保证同一时间只有一个线程能执行Python字节码。
影响:
CPU密集型任务(如大量计算):多线程几乎没用,因为线程切换时GIL会释放,但同一时间只有一个线程跑,不如用多进程(multiprocessing,每个进程有独立GIL);
IO密集型任务(如网络请求、文件读写):多线程有用,因为线程等待IO时会释放GIL,其他线程能趁机执行。
问题:Python的垃圾回收(GC)机制主要靠什么?怎么处理循环引用?
答案:
主要靠两点:
引用计数:每个对象有个“引用数”,引用增加时计数+1,引用删除时-1,计数为0就回收(比如a=[1];b=a;dela,此时b还引用,不回收;delb后计数0,回收);
分代回收:针对“循环引用”(比如a=[];b=[];a.append(b);b.append(a),引用计数都为1,没法靠引用计数回收),用“标记-清除”算法:把所有对象标记,然后删除不可达的对象,再按“存活时间”分代(年轻代、中年代、老年代),存活越久的对象检查频率越低,提高效率。
问题:__init__和__new__有什么区别?
答案:
都是Python的构造相关方法,但作用不同:
__new__:先执行,负责“创建对象”,返回一个新的实例对象(cls参数是类本身);
__init__:后执行,负责“初始化对象”,给实例赋值属性(self参数是__new__创建的实例);
比如创建obj=MyClass()时,实际是obj=MyClass.__new__(MyClass)→再调用MyClass.__init__(obj)。
一般不用重写__new__,除非要做单例模式(比如保证一个类只有一个实例)。
三、实际应用(考察项目经验)
问题:为什么用with语句操作文件比直接open()好?with的原理是什么?
答案:
直接open()容易忘写close(),导致文件句柄泄露;with能自动执行“资源释放”(不管有没有异常),比如:
withopen(test.txt,r)asf:
data=
您可能关注的文档
最近下载
- 《旅行社经营与管理》课件 第一章 旅行社概述.ppt VIP
- 人教版八年级数学上册分式的加减法练习题精选47.doc VIP
- 最新【人教版】三年级数学上册教科书电子版教学课本(2025年秋-新教材版本).docx
- 【精选】申银万国行业分类标准(2014版).pdf VIP
- 3500个常用汉字整理完整.doc VIP
- 农村狗狗交配的全过程,让你看了有点不可置信.pdf VIP
- 2023——2024学年度第一学期北师大版小学数学一年级上册教学计划附教学进度表.docx VIP
- 新北师大版四年级数学上册第四单元《买文具》课件14.ppt VIP
- 8.2 掌握自驾游计调业务 课件《旅行社计调业务》(中国言实出版社).pptx VIP
- 申银万国行业分类.pdf VIP
文档评论(0)