Python面试题及答案(实用版).docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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=

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档