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高频面试题(含答案)

1.说说Python中列表(list)和元组(tuple)的区别,实际开发中怎么选?

答案:核心区别在「可变性」和「用途场景」:

可变性:list是可变的(能增删改元素),tuple是不可变的(创建后不能改);

性能:tuple因为不可变,内存占用比list小,访问速度也更快;

用法:list适合存动态数据(比如用户输入的列表、需要频繁修改的数据集);tuple适合存固定数据(比如配置项、函数返回的多个值、字典的key——因为key必须不可变)。

举个例子:存接口返回的固定字段(如姓名、年龄)用tuple,存实时更新的用户列表用list。

2.什么是深拷贝(deepcopy)和浅拷贝(shallowcopy)?怎么实现?

答案:本质是「拷贝是否穿透嵌套结构」:

浅拷贝:只拷贝外层容器,嵌套的子元素还是引用原对象。比如用列表切片new_list=old_list[:]、copy.copy();

深拷贝:完全拷贝所有层级的元素,生成独立的新对象,用copy.deepcopy()。

举个实际坑点:如果原列表是old=[[1,2],[3,4]],浅拷贝后改new[0][0]=0,原列表的[1,2]也会变成[0,2];但深拷贝后改新列表,原列表完全不受影响。

开发中处理嵌套数据(比如复杂字典、嵌套列表)时,一定要注意用深拷贝,避免意外修改原数据。

3.Python函数里的global和nonlocal关键字有什么用?

答案:解决「变量作用域」问题:

global:在函数内部修改「全局变量」时用。比如全局定义count=0,函数里想改count,必须先声明globalcount,否则会被当成局部变量;

nonlocal:在嵌套函数里修改「外层函数的局部变量」时用。比如外层函数定义num=10,内层函数想改num,要声明nonlocalnum,不然内层的num是新的局部变量。

注意:尽量少用global,容易让代码逻辑混乱,优先用函数返回值传递变量;nonlocal在闭包场景(比如装饰器、嵌套函数)里很常用。

4.装饰器(decorator)是什么?写一个简单的装饰器例子,比如统计函数执行时间。

答案:装饰器是「包装函数的函数」,能在不修改原函数代码的前提下,给函数加功能(比如计时、日志、权限校验),本质是闭包的应用。

例子(统计执行时间):

importtime

fromfunctoolsimportwraps#必须加,不然会丢失原函数的元信息(如函数名)

deftimer(func):

@wraps(func)#保留原函数的__name__、__doc__

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(1,2)#输出:add执行时间:1.00秒,返回3

实际开发中,装饰器常用在接口鉴权、日志打印、缓存(比如lru_cache)等场景。

5.生成器(generator)和普通列表推导式有什么区别?为什么用生成器?

答案:核心是「内存占用」和「计算方式」:

列表推导式:一次性生成所有元素,存在内存里,比如[x*2forxinrange(10000)]会占10000个元素的内存;

生成器:惰性计算,每次只生成一个元素,不存全部,用(x*2forxinrange(10000))或函数里加yield实现。

比如处理大文件(比如10G的日志),用生成器读一行处理一行,不会内存溢出;用列表的话,直接把整个文件读进内存就崩了。

生成器还能节省内存,比如遍历100万条数据,生成器只占一个元素的内存,列表要占100万个。

6.Python的GIL锁是什么?对多线程有什么影响?怎么解决?

答案:GIL是「全局解释器锁」,是CPython解释器的特性(不是Python语言的特性):

作用:同一时间,一个进程里的多个线程,只能有一个拿到GIL,执行Python字节码;哪怕

文档评论(0)

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

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

1亿VIP精品文档

相关文档