小能豆

Python 面试问题和答案

python

3.Python是编译型语言还是解释型语言?

实际上,Python是一种部分编译和部分解释的语言。当我们执行代码时,首先完成编译部分,这将在内部生成字节码,该字节码由Python虚拟机(pvm)根据底层平台(机器+操作系统)进行转换。

4. Python 中的“#”符号有什么作用?

’#’ 用于注释该行后面的所有内容。

5. 可变数据类型和不可变数据类型有什么区别?

可变数据类型可以编辑,即它们可以在运行时更改。例如,列表、字典等。
不可变数据类型无法编辑,即它们无法在运行时更改。例如——字符串、元组等。

6. Python 中如何通过值或引用传递参数?

Python 中的一切都是对象,所有变量都保存对对象的引用。参考值根据功能而定;因此,您无法更改引用的值。但是,如果对象是可变的,您可以更改它。

7. 集合和字典有什么区别?

集合是数据类型的无序集合,可迭代、可变且没有重复元素。
Python中的字典是数据值的无序集合,用于像地图一样存储数据值。

8.什么是列表理解?举个例子。

列表理解是一种语法构造,可简化基于现有可迭代对象的列表的创建。

例如:

my_list = [i for i in range(1, 10)]

9. 什么是 lambda 函数?

lambda 函数是匿名函数。该函数可以有任意数量的参数,但只能有一个语句。例如:

a = lambda x, y : x*y
print(a(7, 19))

10.Python中的pass是什么?

pass表示不执行任何操作,或者说,它是复合语句中的占位符,其中应该留有空白,并且可以不写任何内容。

11.Python中/和//有什么区别?

// 代表楼层划分,/ 代表精确划分。例如:

5//2 = 2
5/2 = 2.5

12. Python 中如何进行异常处理?

有3个主要关键字,即try、 except和finally,用于捕获异常并相应地处理恢复机制。Try 是监视错误的代码块。发生错误时执行 except 块。

最后一个块的优点是在尝试错误后执行代码。无论是否发生错误,该块都会被执行。最后,块用于执行对象/变量所需的清理活动。

13.Python中的swapcase函数是什么?

它是一个字符串函数,可将所有大写字符转换为小写字符,反之亦然。它用于更改字符串的现有大小写。此方法创建包含交换大小写中所有字符的字符串副本。例如:

string = "GeeksforGeeks"
string.swapcase() ---> "gEEKSFORgEEKS"

14.Python中for循环和while循环的区别

“for”循环通常用于迭代各种集合类型的元素,例如List、Tuple、Set和Dictionary。开发人员使用“for”循环,其中有条件开始和结束。而“while”循环是任何其他编程语言中使用的实际循环功能。程序员使用 Python while 循环,其中只有结束条件。

15. 我们可以在Python中将函数作为参数传递吗?

是的,可以将多个参数传递给函数,包括对象、变量(具有相同或不同的数据类型)和函数。函数可以作为参数传递给其他函数,因为它们是对象。高阶函数是可以将其他函数作为参数的函数。

16. 什么是args 和kwargs?

要将可变数量的参数传递给 Python 中的函数,请在函数规范中使用特殊语法args 和 *kwargs 。它用于传递可变长度、无关键字参数列表。通过使用 *,我们与 * 关联的变量变得可迭代,允许您对其进行操作,例如迭代它以及使用映射和过滤器等高阶操作。

17. Python 中需要缩进吗?

是的,Python 中需要缩进。通过使用 Python 缩进, Python解释器可以获知一组语句属于特定的代码块。缩进使所有编程语言的开发人员都可以轻松阅读代码,但在 Python 中,按特定顺序缩进代码非常重要。

18.Python 中的作用域是什么?

我们可以找到变量并在需要时访问它的位置称为变量的范围。

  • Python 局部变量:局部变量是在函数内初始化的变量,并且对于该函数来说是唯一的。无法在函数外部访问它。
  • Python 全局变量:全局变量是在任何函数外部定义和声明的变量,并且不指定给任何函数。
  • 模块级作用域:指程序中可访问的当前模块的全局对象。
  • 最外层作用域:指的是程序可以调用的任何内置名称。引用的名称位于此范围内对象的最后。

19.Python 中的文档字符串是什么?

Python 文档字符串(或文档字符串)提供了一种将文档与 Python 模块、函数、类和方法关联起来的便捷方法。

  • 声明文档字符串:文档字符串是在类、方法或函数声明下方使用“三单引号”或“”“三双引号”“”来声明的。所有函数都应该有一个文档字符串。
  • 访问文档字符串:可以使用对象的 doc 方法或使用帮助函数来访问文档字符串。

20.什么是动态类型语言?

类型化语言是我们定义数据类型的语言,机器在编译时或运行时会知道它。类型语言可以分为两类:

  • 静态类型语言:在这种类型的语言中,变量的数据类型在编译时已知,这意味着程序员必须在声明变量时指定变量的数据类型。
  • 动态类型语言:这些语言不需要任何变量的任何预定义数据类型,因为它在运行时由机器本身解释。在这些语言中,解释器在运行时根据变量的值将数据类型分配给变量。

21.Python中的break、continue和pass是什么?

Break 语句用于终止它所在的循环或语句。之后,控制权将传递给break语句之后出现的语句(如果可用)。

和break语句一样, Continue也是一个循环控制语句。continue语句与break语句相反,它不是终止循环,而是强制执行循环的下一次迭代。

pass表示不执行任何操作,或者说,它是复合语句中的占位符,其中应该留有空白,并且可以不写任何内容。

22. Python 中的内置数据类型是什么?

以下是 Python 中的标准或内置数据类型:

  • 数值: Python 中的数值数据类型表示具有数值的数据。数值可以是整数、浮点数、布尔值甚至是复数。

  • 序列类型:

Python 中的序列数据类型是相似或不同数据类型的有序集合。Python中有几种序列类型:

  • Python 字符串
  • Python列表
  • Python 元组
  • Python范围

  • 映射类型:

在Python中,可以使用映射对象将可哈希数据映射到随机对象。目前只有一种常见的映射类型,字典,并且映射对象是可变的。

  • Python 字典

  • 集合类型:在Python中,集合是数据类型的无序集合,它是可迭代的、可变的并且没有重复元素。尽管集合可能由各种元素组成,但集合中元素的顺序是未定义的。

23. 如何在 Python 中对数字进行取整?

Python 数学模块包含一个可用于计算数字下限的方法。

  • Python中的floor()方法返回x的下限,即不大于x的最大整数。
  • 另外,Python 中的 ceil(x) 方法返回 x 的上限值,即大于或等于 x 的最小整数。

中级Python面试问题

24. xrange 和 range 函数有什么区别?

range() 和 xrange() 是两个函数,可用于在 Python 中的 for 循环中迭代一定次数。在 Python 3 中,没有 xrange,但 range 函数的行为类似于 Python 2 中的 xrange。

  • range() – 返回使用 range() 函数创建的数字列表。
  • xrange() – 此函数返回可用于仅通过循环显示数字的生成器对象。唯一的特定范围是按需显示的,因此称为惰性评估

25.什么是字典理解?举个例子

字典理解是一种语法构造,可以简化基于现有可迭代对象的字典的创建。

例如:my_dict = {i:1+7 for i in range(1, 10)}

26. 元组理解吗?如果是,怎么做,如果不是,为什么?

(i for i in (1, 2, 3))

元组理解在 Python 中是不可能的,因为它最终会出现在生成器中,而不是元组理解。

27. 列表和元组的区别?

我们来分析一下List和Tuple的区别:

列表

  • 列表是可变数据类型。
  • 列表消耗更多内存
  • 该列表更适合执行插入和删除等操作。
  • 迭代的含义是耗时的

元组

  • 元组是不可变的数据类型。
  • 与列表相比,元组消耗的内存更少
  • 元组数据类型适合访问元素
  • 迭代的含义是相对更快

28. 浅拷贝和深拷贝有什么区别?

创建新实例类型时使用浅复制,它保留复制的值,而深复制则存储已复制的值。

浅拷贝具有更快的程序执行速度,而深拷贝则使其速度变慢。

29. python的sort()和sorted()函数使用哪种排序技术?

Python 使用Tim Sort算法进行排序。这是一种稳定的排序,最坏情况是 O(N log N)。它是一种混合排序算法,源自合并排序和插入排序,旨在对多种实际数据表现良好。

30.什么是装饰器?

装饰器是 Python 中非常强大且有用的工具,因为它们是我们在 Python 语法中进行的特定更改,以便轻松更改函数。

31.如何调试Python程序?

通过使用这个命令我们可以调试Python程序:

$ python -m pdb python-script.py

32.Python中的迭代器是什么?

在 Python 中,迭代器用于迭代一组元素、容器(例如列表)。迭代器是项目的集合,它们可以是列表、元组或字典。Python 迭代器实现 itr 和 next() 方法来迭代存储的元素。我们通常使用循环来迭代Python中的集合(列表、元组)。

33.Python中的生成器是什么?

在Python中,生成器是一种指定如何实现迭代器的方式。它是一个普通函数,只不过它在函数中产生表达式。它不实现 itr 和 next() 方法,并减少其他开销。

如果一个函数至少包含一个yield语句,它就成为一个生成器。Yield 关键字通过保存其状态来暂停当前执行,然后在需要时从相同状态恢复。

34.Python支持多重继承吗?

与 Java 不同,Python 确实支持多重继承。多重继承意味着一个类可以从多个父类派生。

35.Python中的多态性是什么?

多态性意味着采取多种形式的能力。因此,例如,如果父类有一个名为 ABC 的方法,那么子类也可以有一个具有相同名称 ABC 的方法,并且有自己的参数和变量。Python 允许多态性。

36.Python中定义封装?

封装意味着将代码和数据绑定在一起。Python 类是封装的一个示例。

37. Python 中如何进行数据抽象?

数据抽象仅提供所需的细节,并向外界隐藏实现。在Python中可以通过使用接口和抽象类来实现。

38.Python中如何进行内存管理?

Python 使用其私有堆空间来管理内存。基本上,所有的对象和数据结构都存储在私有堆空间中。即使程序员也无法访问这个私有空间,因为解释器会处理这个空间。Python还有一个内置的垃圾收集器,它回收所有未使用的内存并释放内存并使其可供堆空间使用。

39.如何使用Python删除文件?

我们可以通过以下方式使用Python删除文件:

  • os.remove()
  • os.unlink()

40.Python中的切片是什么?

Python 切片是一种字符串操作,用于提取字符串的一部分或列表的一部分。使用此运算符,可以指定切片开始位置、结束位置以及指定步骤。列表切片从现有列表中返回一个新列表。

语法:Lst[ 初始 : 结束 : IndexJump ]

41.Python中什么是命名空间?

命名空间是一种命名系统,用于确保名称唯一以避免命名冲突。

高级 Python 面试问题与解答

42.什么是PIP?

PIP 是 Python Installer Package 的缩写,它提供了安装各种 Python 模块的无缝接口。它是一个命令行工具,可以通过互联网搜索软件包并安装它们,而无需任何用户交互。

43. 什么是 zip 函数?

Python zip() 函数返回一个 zip 对象,该对象映射多个容器的相似索引。它接受一个可迭代对象,将其转换为迭代器,并根据传递的可迭代对象聚合元素。它返回元组的迭代器。

44.什么是酸洗和反酸洗?

Pickle 模块接受任何 Python 对象并将其转换为字符串表示形式并使用 dump 函数将其转储到文件中,这个过程称为 pickling。从存储的字符串表示中检索原始 Python 对象的过程称为 unpickling。

45. Python 中的猴子补丁是什么?

在Python中,术语“猴子补丁”仅指在运行时动态修改类或模块。

# g.py
class GeeksClass:
    def function(self):
        print "function()"

import m
def monkey_function(self):
    print "monkey_function()"

m.GeeksClass.function = monkey_function
obj = m.GeeksClass()
obj.function()

46.Python 中的 init() 是什么?

init 相当于 OOP 术语中的构造函数,是 Python 类中的保留方法。每当启动新对象时,都会自动调用 init 方法。该方法在新对象创建后立即为其分配内存。该方法也可用于初始化变量。

47. 写一段代码来显示当前时间?

currenttime= time.localtime(time.time())
print (“Current time is”, currenttime)

48.Python 中的访问说明符是什么?

Python 使用“_”符号来确定对特定数据成员或类的成员函数的访问控制。Python 中的类具有三种类型的Python 访问修饰符

  • 公共访问修饰符:声明为公共的类成员可以从程序的任何部分轻松访问。类的所有数据成员和成员函数默认都是公共的。
  • 受保护的访问修饰符:声明为受保护的类的成员只能由从该类派生的类访问。通过在该类的数据成员之前添加一个下划线“_”符号来声明该类的所有数据成员受保护。
  • 私有访问修饰符:声明为私有的类成员只能在类内部访问,私有访问修饰符是最安全的访问修饰符。类的数据成员通过在该类的数据成员之前添加双下划线“__”符号来声明为私有。

49.Python 中的单元测试是什么?

单元测试是软件测试的第一级,其中测试软件的最小可测试部分。这用于验证软件的每个单元是否按设计运行。单元测试框架是Python的xUnit风格的框架。白盒测试方法用于单元测试。

50.Python全局解释器锁(GIL)?

Python 全局解释器锁(GIL) 是 Python 处理进程时使用的一种进程锁。一般来说,Python只使用一个线程来执行一组书面语句。Python 中单线程进程和多线程进程的性能是相同的,这是因为 Python 中的 GIL。我们无法在Python中实现多线程,因为我们有一个全局解释器锁来限制线程并作为单线程工作。

51.什么是Python中的函数注释?

函数注释是一项允许您将元数据添加到函数参数和返回值的功能。这样你就可以指定函数参数的输入类型和函数返回值的返回类型。

函数注释是与函数各个部分相关联的任意 Python 表达式。这些表达式在编译时计算,在 Python 的运行时环境中没有生命力。Python 没有为这些注释赋予任何含义。当由第三方库(例如 mypy)解释时,它们会被夺走生命。

Python 3.10 以上功能:

52.Python中的异常组是什么?

Python 3.11 的最新功能,异常组。可以使用新的 except 语法来处理 ExceptionGroup。 符号表示每个 except* 子句可以处理多个异常。

ExceptionGroup 是不同类型异常的集合/组。在不创建多个异常的情况下,我们可以将不同的异常分组在一起,以后在需要时可以一一获取,异常在异常组中的存储顺序在调用它们时并不重要。

  • Python3
try:
raise ExceptionGroup('Example ExceptionGroup', (
TypeError('Example TypeError'),
ValueError('Example ValueError'),
KeyError('Example KeyError'),
AttributeError('Example AttributeError')
))
except* TypeError:
...
except* ValueError as e:
...
except* (KeyError, AttributeError) as e:
...

53.什么是Python Switch语句

从 3.10 版本开始,Python 实现了一个称为“结构模式匹配”的 switch case 功能。您可以使用 match 和 case 关键字来实现此功能。请注意,下划线符号用于定义 Python 中 switch 语句的默认情况。

注意:在 Python 3.10 之前,Python 不支持 match 语句。

  • Python3
match term:
case pattern-1:
action-1
case pattern-2:
action-2
case pattern-3:
action-3
case _:
action-default


阅读 144

收藏
2023-07-28

共1个答案

小能豆

2023-11-15