news 2026/11/1 13:26:36

python 面试基础题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 面试基础题

一、基础语法类

1. Python的可变对象和不可变对象有哪些?区别是什么?

答案:

- 不可变(创建后值不可改):int、str、float、tuple、bool、frozenset;

- 可变(创建后值可改):list、dict、set; - 核心区别:不可变对象修改会生成新对象(内存地址变),可变对象修改不改变内存地址。

2. Python中range()和xrange()的区别?

答案*:

- Python2:range()返回列表(一次性生成所有数据),xrange()返回生成器(惰性计算,省内存)

- Python3:移除xrange(),range()等价于Python2的`xrange()`。

3. 解释Python的三元表达式,写一个示例。

答案:

- 语法:值1 if 条件 else 值2(条件为True返回值1,否则返回值2);

- 示例:result = "及格" if score >= 60 else "不及格"`。

4. Python中如何交换两个变量的值?至少两种方法。

答案:

- 方法1(简洁):a, b = b, a;

- 方法2(临时变量):temp = a; a = b; b = temp;

- 方法3(算术运算):a = a + b; b = a - b; a = a - b(仅适用于数值)。

5. break、continue、pass的区别?

答案:

- break:终止整个循环(跳出当前循环体);

- continue:跳过当前循环剩余代码,进入下一次循环;

- pass:空语句,仅占位(无任何操作)。

6. Python中字符串常用的格式化方式有哪些?

答案:

- 方式1:%格式化("姓名:%s,年龄:%d" % (name, age));

- 方式2:str.format("姓名:{},年龄:{}".format(name, age));

- 方式3:f-string(f"姓名:{name},年龄:{age}",效率最高)。

7. 什么是Python的内置函数?列举5个常用内置函数。

答案:

- 定义:Python自带、无需导入即可使用的函数;

- 示例:`len()`(长度)、`range()`(序列生成)、`type()`(类型判断)、`sorted()`(排序)、`enumerate()`(枚举)

8. Python中如何判断一个变量是否为列表?

答案:

- 方法1:isinstance(var, list)(支持继承);

- 方法2:type(var) == list(仅判断精确类型,不支持继承) ##

二、数据结构类

9. 字典(dict)的常用方法有哪些?如何避免取不存在的key时报错?

答案:

- 常用方法:keys()(所有key)、values()(所有值)、items()(所有键值对)、get()(取值)、pop()(删除);

- 避免报错:用dict.get(key, 默认值)

10. 集合(set)的核心作用?如何给列表去重?

答案:

- 核心作用:去重、成员判断(O(1)效率)、集合运算(交集/并集/差集);

- 列表去重:new_list = list(set(old_list))(无序);如需保持顺序:new_list = list(dict.fromkeys(old_list))。

11. 列表的sort()方法和sorted()函数的区别?

答案:

- list.sort():原地排序(修改原列表),无返回值;

- sorted():返回新列表(不修改原列表),可排序任意可迭代对象(如字典、元组);

- 示例:sorted(dict)返回字典key的排序列表。

12. 如何高效合并两个字典?

答案:

- 方法1:dict3 = {**dict1, **dict2};

- 方法2:dict1.update(dict2)(原地合并,修改dict1);

- 方法3:dict3 = dict1 | dict2。

13. 什么是有序字典?Python3.7+的字典有什么变化?

答案:

- 有序字典:collections.OrderedDict,记录key的插入顺序;

- Python3.7+:普通字典默认保留插入顺序,无需再用`OrderedDict`。

14. 如何实现列表的逆序遍历?

**答案**:

- 方法1:`for i in reversed(lst)`(推荐,不修改原列表);

- 方法2:`for i in lst[::-1]`(生成逆序列表,占内存);

- 方法3:`lst.reverse()`(原地逆序,修改原列表)。

15. 元组可以作为字典的key吗?为什么?

**答案**:

- 可以(前提:元组内元素都是不可变对象);

- 原因:字典的key必须是不可变对象(哈希able),元组不可变且可哈希,因此可作为key;若元组包含list等可变对象,则不可作为key。

三、高级特性类

16. 什么是Python的闭包?满足哪些条件?

**答案**:

- 定义:嵌套函数中,内层函数引用外层函数的变量,且外层函数返回内层函数;

- 条件:① 内层函数嵌套在外层函数中;② 内层引用外层非全局变量;③ 外层返回内层函数;

- 应用:装饰器、缓存函数。

17. 装饰器的执行顺序?举例说明。

**答案**:

- 顺序:装饰器按“从下到上”装饰,按“从上到下”执行;

- 示例:

@decorator1

@decorator2

def func():

pass

# 等价于 func = decorator1(decorator2(func))

18. 什么是协程?async/await的作用?

**答案**:

- 协程:轻量级线程(用户态),通过`async/await`实现异步编程,切换开销远低于线程;

- `async`:定义协程函数(返回协程对象);

- `await`:挂起协程执行,等待异步任务完成(如IO操作),期间可执行其他协程;

- 应用:IO密集型任务(爬虫、接口调用)。

19. 如何捕获Python中的异常?简述`try-except-else-finally`的作用。

**答案**:

- 语法:`try`(执行可能报错的代码)→`except`(捕获异常并处理)→`else`(无异常时执行)→`finally`(无论是否异常都执行,用于释放资源);

- 示例:文件操作中`finally`关闭文件句柄。

20. 什么是模块和包?如何导入模块?

**答案**:

- 模块:`.py`文件(包含函数/类/变量);包:包含`__init__.py`的文件夹(多个模块的集合); - 导入方式:`import 模块`、`from 模块 import 函数`、`from 包 import 模块`、`import 模块 as 别名

21. `__init__`和`__new__`的区别?

**答案**:

- `__new__`:创建实例的方法(构造方法),返回实例对象,优先于`__init__`执行;

- `__init__`:初始化实例的方法(初始化方法),接收`__new__`创建的实例,给实例赋值;

- 应用:`__new__`用于单例模式,`__init__`用于初始化属性。

22. 什么是Python的魔法方法?列举3个常用的。

**答案**:

- 定义:以`__`开头和结尾的方法(如`__init__`),自动触发执行;

- 常用: - `__str__`:打印对象时返回字符串(`print(obj)`触发); - `__len__`:获取对象长度(`len(obj)`触发); - `__call__`:让对象可调用(`obj()`触发)。

四、工程实践类

23. 如何读取大文件(如10GB)?避免OOM的方法?

**答案**:

- 方法1:逐行读取(`for line in open("file.txt", "r")`,Python逐行加载,内存占用低); - - 方法2:分块读取(`while True: chunk = f.read(1024*1024); if not chunk: break`);

- 注意:用`with`语句自动释放文件句柄,避免资源泄露。

24. Python中如何操作JSON数据?

**答案**:

- 导入`json`模块: - 序列化(Python→JSON):`json.dumps(data, ensure_ascii=False, indent=4)`; - 反序列化(JSON→Python):`json.loads(json_str)`;

- 文件操作:`json.dump(data, f)`(写入文件)、`json.load(f)`(读取文件)

25. 如何实现Python代码的单元测试?

**答案**:

- 使用内置`unittest`模块或第三方`pytest`库;

- 步骤:① 定义测试类继承`unittest.TestCase`;② 编写以`test_`开头的测试方法;③ 用`assert`断言结果;

- 示例:`self.assertEqual(func(1), 2)`。

26. 如何在Python中实现多进程?为什么多进程能规避GIL?

**答案**:

- 方法:使用`multiprocessing.Process`创建进程,或`multiprocessing.Pool`进程池;

- 原因:GIL是进程级锁,每个进程有独立的Python解释器和GIL,多进程可真正并行执行CPU密集型任务。

27. 如何处理Python中的编码问题?

**答案**:

- 核心:统一编码为UTF-8; - 文件编码:在`.py`文件开头加`# -*- coding: utf-8 -*-`;

- 字符串处理:`str.encode("utf-8")`(字符串→字节)、`bytes.decode("utf-8")`(字节→字符串);

- 避免乱码:读取文件时指定编码(`open("file.txt", "r", encoding="utf-8")`)。

五、性能优化类

28. 如何优化Python循环的效率?

**答案**:

- 方法1:用列表推导式/生成器表达式替代普通for循环(底层C实现,快10~20倍);

- 方法2:用`map/filter`替代循环(内置函数,效率更高);

- 方法3:关键循环用`Numba`/`Cython`加速(编译为机器码)

29. 什么是缓存?如何用Python实现函数缓存?

**答案**:

- 缓存:存储函数重复计算的结果,避免重复执行;

- 实现:用`functools.lru_cache`装饰器(限定缓存大小,自动缓存函数返回值);

- 示例:

from functools import lru_cache

@lru_cache(maxsize=128)

def calc(x):

return x*2

30. 列举3种Python性能分析工具及使用场景。

**答案**:

- `cProfile`:内置性能分析工具,分析函数执行时间、调用次数(定位慢函数);

- `line_profiler`:行级性能分析,定位函数内慢代码行;

- `memory_profiler`:内存分析工具,定位内存泄漏/高内存占用代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 3:23:50

告别复杂代码!用Fish Speech 1.5 WebUI一键生成专业级语音

告别复杂代码!用Fish Speech 1.5 WebUI一键生成专业级语音 你是否厌倦了为了合成一段语音,需要先安装Python、配置CUDA、下载模型,然后面对满屏的命令行参数?你是否曾想给自己的视频配个音,却被复杂的API调用和代码调…

作者头像 李华
网站建设 2026/10/20 9:55:34

图床和OSS 存储和使用场景对比

图床(Image Hosting Service)和 OSS(对象存储服务,Object Storage Service)在核心功能上都是用于存储和分发图片等非结构化数据,但它们在定位、功能复杂度、成本结构和使用场景上有显著区别。 简单来说&…

作者头像 李华
网站建设 2026/10/20 7:22:44

手把手教你用MedGemma-X:像聊天一样分析X光片,小白也能快速上手

手把手教你用MedGemma-X:像聊天一样分析X光片,小白也能快速上手 1. 前言:当AI医生学会“看”和“说” 想象一下,你手里有一张X光片,心里满是疑问:“这片子上的阴影是什么?”“这个结节看起来危…

作者头像 李华
网站建设 2026/10/20 9:12:52

Python游标与连接关闭区别

在Python的数据库编程中,cursor.close() 和 conn.close() 是两个不同层次的操作,它们的区别如下:1. 作用对象不同cursor.close():关闭的是游标对象。游标是从数据库连接(connection)中创建的,用…

作者头像 李华
网站建设 2026/10/27 20:10:59

春联生成模型-中文-base内存优化:解决大并发下的显存溢出问题

春联生成模型-中文-base内存优化:解决大并发下的显存溢出问题 春节临近,线上春联生成的需求量激增。我们部署的“春联生成模型-中文-base”服务,原本在平时运行得稳稳当当,但一到流量高峰,就频繁出现显存溢出&#xf…

作者头像 李华