常见的 35 个 Python 面试题及答案

本文为Python初学者和有经验的开发者提供了面试常见问题,涵盖了Python的特性、深浅拷贝的区别、列表与元组的不同、Flask框架简介、继承概念、内存管理等基础知识,还包括多线程、字典操作和进阶的Python概念如闭包和位运算符。通过这些问题,读者能更好地准备Python面试并巩固相关知识。
摘要由CSDN通过智能技术生成

作为一个 Python 新手,你必须熟悉基础知识。在本文中我们将讨论一些 Python 面试的基础问题和高级问题以及答案,以帮助你完成面试。包括 Python 开发问题、编程问题、数据结构问题、和 Python 脚本问题。让我们来深入研究这些问题

Python 面试问题

Q.1. Python 的特点和优点是什么?

Python 可以作为编程的入门语言,因为他具备以下特质:

\1. 解释性

\2. 动态特性

\3. 面向对象

\4. 语法简洁

\5. 开源

\6. 丰富的社区资源

实际上 Python 的优点远不止这些,更详细的介绍可以阅读 Introduction to Python( https://data-flair.training/blogs/python-tutorial/)

Q.2. 深拷贝和浅拷贝的区别是什么?

深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中,我们使用 deepcopy()函数进行深拷贝,使用方法如下:

深拷贝-Python 面试问题及答案

浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。使用 copy()函数进行浅拷贝,使用方法如下:

浅拷贝—Python 面试问题及答案

Q.3. 列表和元祖有什么不同?

主要区别在于列表是可变的,元祖是不可变的。看下面的例子:

img

会出现以下错误提示:

TypeError: ‘tuple’ object does not support item assignment

关于列表和元祖的更多内容参考 Tuples vs Lists( https://data-flair.training/blogs/python-tuples-vs-lists/)

2. Python 面试基础题

Q.4 到 Q.20 是新手经常会被问到的一些 Python 基础题,有经验的人也可以参考这些问题来复习这些概念。

Q.4. 解释 Python 中的三元表达式

与 C++不同, 在 Python 中我们不需要使用 ? 符号,而是使用如下语法:

[on true] if [expression]else [on false]

如果 [expression] 为真, 则 [on true] 部分被执行。如果表示为假则 [on false] 部分被执行

下面是例子:

2

Hi

Q.5. Python 中如何实现多线程?

线程是轻量级的进程,多线程允许一次执行多个线程。众所周知,Python 是一种多线程语言,它有一个多线程包。

GIL(全局解释器锁)确保一次执行单个线程。一个线程保存 GIL 并在将其传递给下一个线程之前执行一些操作,这就产生了并行执行的错觉。但实际上,只是线程轮流在 CPU 上。当然,所有传递都会增加执行的开销。

Q.6. 解释继承

一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法)。

继承使我们可以重用代码,并且还可以更方便地创建和维护代码。Python 支持以下类型的继承:

\1. 单继承- 一个子类类继承自单个基类

\2. 多重继承- 一个子类继承自多个基类

\3. 多级继承- 一个子类继承自一个基类,而基类继承自另一个基类

\4. 分层继承- 多个子类继承自同一个基类

\5. 混合继承- 两种或两种以上继承类型的组合

关于继承的更多内容参考 Python Inheritance( https://data-flair.training/blogs/python-inheritance/)

Q.7. 什么是 Flask?

Flask 是一个使用 Python 编写的轻量级 Web 应用框架,使用 BSD 授权。其 WSGI 工具箱采用 Werkzeug,模板引擎则使用 Jinja2。除了 Werkzeug 和 Jinja2 以外几乎不依赖任何外部库。因为 Flask 被称为轻量级框架。

Flask 的会话会话使用签名 cookie 来允许用户查看和修改会话内容。它会记录从一个请求到另一个请求的信息。但如果要修改会话,则必须有密钥 Flask.secret_key。

我们将在后续的课程中进一步讨论 Flask。

Q.8. 如何在 Python 中管理内存?

Python 用一个私有堆内存空间来放置所有对象和数据结构,我们无法访问它。由解释器来管理它。不过使用一些核心 API,我们可以访问一些 Python 内存管理工具控制内存分配。

Q.9. 解释 Python 中的 help() 函数和 dir() 函数。

help() 函数返回帮助文档和参数说明:

运行结果如下:

Help on function copy in module copy

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module』s doc string for more info.

dir() 函数返回对象中的所有成员 (任何类型)

img

Q.10. 当退出 Python 时是否释放所有内存分配?

答案是否定的。那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放

另外不会释放 C 库保留的部分内容。

Q.11. 什么是猴子补丁?

在运行时动态修改类和模块

img

Hi, monkey

Q.12. 什么是 Python 字典?

字典是我在 C++和 Java 中没有见过的数据结构,它拥有键-值对

3

字典是可变的,我们也可以用推导式的方式创建它.

{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}

要了解更多字典的内容请点击 Python Dictionaries( https://data-flair.training/blogs/python-dictionaries/)

*Q.13. 能否解释一下 *args 和 *kwargs?

如果我们不知道将多少个参数传递给函数,比如当我们想传递一个列表或一个元组值时,就可以使用*args。

3

2

1

4

7

当我们不知道将会传入多少关键字参数时,使用**kwargs 会收集关键字参数。

a.1

b.2

c.7

使用 args 和 kwargs 作为参数名只是举例,可以任意替换。

对于 Python 的基础题任何疑问,请在评论区提问。

Q.14. 编程实现计算文件中的大写字母数

img

26

Q.15. 什么是负索引?

我们先创建如下列表:

与正索引不同,负索引是从右边开始检索。

6

同样可以用于列表的切片:

[3, 4, 5, 6, 7]

Q.16. 如何随机打乱列表中元素,要求不引用额外的内存空间?

我们用 random 包中的 shuffle() 函数来实现。

[3, 4, 8, 0, 5, 7, 6, 2, 1]

Q.17. 解释 Python 中的 join() 和 split() 函数

join() 函数可以将指定的字符添加到字符串中。

‘1,2,3,4,5’

split() 函数可以用指定的字符分割字符串

[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]

Q.18. Python 区分大小写吗?

验证 Python 是否区分大小写的方法是测试 myname 和 Myname 在程序中是不是算同一个标识符。观察以下代码的返回结果:

Myname

NameError: name ‘Myname’ is not defined

如你所见,这里出现了 NameError,所以 Python 是区分大小的语言。

Q.19. Python 中标识符的命名规则?

Python 中的标识符可以是任意长度,但必须遵循以下命名规则:

\1. 只能以下划线或者 A-Z/a-z 中的字母开头。

\2. 其余部分只能使用 A-Z/a-z/0-9。

\3. Python 标识符区分大小写。

\4. 关键字不能作为标识符。Python 有以下这些关键字:

img

Q.20. 如何删除字符串中的前置空格

前置空格是第一个非空格字符前的所有空格,使用 lstrip() 函数来删除.

‘Ayushi ‘

如图这个字符串既包含前置空格也包含后置空格. 调用 lstrip() 函数去除了前置空格。如果想去除后置空格,使用 rstrip() 函数。

‘ Ayushi’

以上是面向 Python 新手的基础题部分。

3. Python 面试进阶题

Q. 21 至 Q. 35 是针对有经验者的一些 Python 面试问题及其答案和示例。

Q.21. 如何将字符串转换为小写?

使用 lower() 函数

‘ayushi’

转换为大写用 upper() 函数

‘AYUSHI’

要检查字符串是否为全大写或全小写,使用 isupper() 和 islower() 函数

img

像 @ 和$这样的字符即满足大写也满足小写。

istitle() 可以检查字符串是否是标题格式。

True

Q.22. Python 中的 pass 语句有什么作用?

我们在写代码时,有时可能只写了函数声明而没想好函数怎么写,但为了保证语法检查的正确必须输入一些东西。在这种情况下,我们使用 pass 语句。

类似的 break 语句可以跳出循环。

0

1

2

continue 语句可以跳到下一轮循环。

0

1

2

4

5

6

Q.23. 请解释 Python 中的闭包?

如果在一个内部函数里。对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就是一个闭包。

7

闭包的详细解释请点击 Closures in Python。(https://data-flair.training/blogs/python-closure/)

*Q.24. 解释 Python 中的//,%和*运算符

//运算符执行地板除法,返回结果的整数部分 (向下取整)。

3

用/符号除法结果为 3.5。

符号表示取幂. ab 返回 a 的 b 次方

1024

% 是取模符号。返回除法后的余数。

6

0.5

对于 Python 进阶面试问题和答案有任何疑问请在评论区提问。

Q.24. Python 中有多少种运算符,解释算术运算符。

这类面试问题可以判断你的 Python 功底,可以举一些实例来回答这类问题。

在 Python 中我们有 7 中运算符:算术运算符、关系 (比较) 运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

\1. 加号 (+) 将两个对象的值相加。

15

\2. 减号 (-) 将第一个对象的值减去第二个对象的值。

-1

\3. 乘号 (*) 将两个对象的值相乘。

56

\4. 除号 (/) 将第一个对象的值除以第二个对象的值。

0.875

1.0

关于地板除法、取模和取幂,请参考上一个问题。

Q.25. 解释 Python 中的关系运算符。

关系运算符用来比较两个对象。

\1. 判断小于 (<):如果符号左边的值比右边小则返回 True。

False

\2. 判断大于 (>):如果符号左边的值比右边大则返回 True。

True

出现上面的错误结果是因为 Python 的浮点运算存在一些 Bug。

\3. 判断小于等于 (<=):如果符号左边的值小于或等于右边则返回 True。

True

\4. 大判断于等于 (>=):如果符号左边的值大于或等于右边则返回 True。

True

\5. 判断等于 (==) 如果符号两边的值相等则返回 True。

True

\6. 判断不等于 (!=) 如果符号两边的值不等则返回 True。

True

True

Q.26. 解释 Python 中的赋值和算数运算符?

这是面试中的常见题目。我们将算数运算符和赋值符号放在一起介绍。

img

Q.27. 解释 Python 中的逻辑运算符

Python 中有三个逻辑运算符:and、or、not

img

Q.28. 解释 Python 中的成员运算符

使用 in 和 not in 运算符我们可以判断某个值是否在成员中。

img

Q.29. 解释 Python 中的身份运算符

这是非常常见的 Python 面试题,用下面的示例来回答.

is 和 not is 运算符可以判断两个对象是否相同

img

Q.30. 解释 Python 中的位运算符

此运算符按二进制位对值进行操作。

\1. 与 (&) 返回按位与结果

2

\2. 或 (|) 返回按位或结果

3

\3. 异或 (^) 返回按位异或结果

1

\4. 取反 (~) 返回按位取反结果

-3

\5. 左移位 (<<) 将符号左边数的二进制左移右边数位

4

1 的二级制 001 左移 2 位变成 100 也即十进制的 4

\6. 右移位 (>>)

1

想了解关于位运算符的更多内容请点击 Operators in Python(https://data-flair.training/blogs/python-operators/)

Q.31. 如何在 Python 使用多进制数字?

除十进制以外,在 Python 中还可以使用二进制、八进制、十六进制。

\1. 二进制数有 0 和 1 组成,我们使用 0b 或 0B 前缀表示二进制数

10

使用 bin() 函数可以将数字转换为二进制

‘0b1111’

\2. 八进制数由数字 0-7 组成,使用前缀 0o 或 0O 表示 8 进制数

‘0o10’

\3. 十六进数由数字 0-15 组成,使用前缀 0x 或者 0X 表示 16 进制数

‘0x10’

‘0xf’

Q.32. 如何获取字典中的所有键?

使用 keys() 来获取字典中的所有键

Q.33. 问什么标识符不建议使用下划线开头?

因为在 Python 中以下划线开头的变量为私有变量,如果你不想让变量私有,就不要使用下划线开头。

Q.34. 如何声明多个变量并赋值?

有两种方式:

Q.35. 什么是元组的解封装?

首先我们来介绍元组封装:

(3, 4, 5)

将 3,4,5 封装到元组 mytuple 中。

现在我们要将这些值解封装到变量 x,y,z 中

12

以上是 Python 高级面试问题和答案,新手也可以参考这些问题以获得进阶的 Python 知识。

-END-


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

👉Python学习大礼包👈

在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python书籍和视频合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉Python面试刷题👈

👉Python副业兼职路线👈

在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取保证100%免费

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

  • 10
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当准备面试时,了解一些常见Python面试问题及其答案是非常重要的。以下是一些常见Python面试问题及其答案: 1. Python中的列表和元组有什么区别? - 列表是可变的,可以修改、添加和删除元素;而元组是不可变的,一旦创建就不能修改。 2. 什么是Python中的装饰器? - 装饰器是一种Python语法糖,用于修改函数或类的行为。它们允许在不修改原始代码的情况下添加额外的功能。 3. 解释一下Python中的GIL(全局解释器锁)是什么? - GIL是Python解释器中的一个机制,它确保同一时间只有一个线程执行Python字节码。这意味着在多线程程序中,同一时间只有一个线程能够执行Python代码。 4. 什么是生成器(Generator)? - 生成器是一种特殊类型的函数,它可以暂停和恢复执行。它们用于惰性地生成序列,可以节省内存并提高性能。 5. Python中的深拷贝和浅拷贝有什么区别? - 浅拷贝创建一个新对象,但是其中的元素仍然是原始对象的引用。深拷贝创建一个完全独立的新对象,包括其中的元素。 6. 什么是Python中的异常处理? - 异常处理是一种机制,用于捕获和处理程序运行时出现的错误。它可以防止程序崩溃,并提供错误信息和恢复机制。 7. 解释一下Python中的迭代器和可迭代对象的区别。 - 可迭代对象是指实现了__iter__()方法的对象,它可以返回一个迭代器。迭代器是一个实现了__next__()方法的对象,它可以逐个返回元素。 8. 什么是Python中的命名空间(Namespace)? - 命名空间是一个用于存储变量和函数名称的容器。它们用于避免命名冲突,并提供代码组织和模块化的方式。 9. 解释一下Python中的多线程和多进程的区别。 - 多线程是在同一进程中运行多个线程,共享同一内存空间。多进程是在不同的进程中运行多个进程,每个进程有自己独立的内存空间。 10. 什么是Python中的模块和包? - 模块是一个包含Python代码的文件,可以被其他程序导入和使用。包是一个包含多个模块的目录,它提供了更好的代码组织和模块化的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值