Python 面试必知 100 例。收集整理了目前 Python 岗位常见的面试题,心愿大家通过学习了解相干知识点。上面介绍的是 6~10 道题。
六、什么是 lambda 函数?
在 Python 中,lambda函数也被称为匿名函数,这是因为它们没有正式的函数名。lambda函数是一种简洁的创立小型函数的形式。
lambda函数的根本语法如下:
lambda arguments: expression
这里,arguments是函数的输出,而 expression 是函数的输入。lambda函数能够承受任意数量的参数,但只能有一个表达式。
例如,咱们能够创立一个 lambda 函数来计算两个数字的和:
add = lambda x, y: x + y
print(add(5, 3)) # Output: 8
在这个例子中,lambda函数承受两个参数 x 和y,并返回它们的和。而后咱们将这个 lambda 函数赋值给 add,这样咱们就能够像应用其余函数一样应用这个lambda 函数了。
只管 lambda 函数在代码中看起来更简洁,然而它们通常只在须要简略性能的中央应用,例如作为排序函数的关键字参数。对于更简单的性能,通常举荐应用残缺的 def 语句来定义函数。
七、什么是装璜器?
在 Python 中,装璜器(Decorator)是一种非凡类型的函数,它容许咱们向曾经存在的对象增加额定的性能。装璜器的常见用处包含插入日志、性能测试、事务处理、缓存、权限校验等场景。装璜器是批改已有对象的一种轻便、弱小且可保护的形式。
装璜器的根本语法如下:
@decorator
def function():
pass
这里,@decorator是装璜器,function()是要被装璜的函数。Python 会先执行装璜器来装璜函数,而后再执行这个函数。
以下是一个简略的装璜器示例:
def my_decorator(func):
def wrapper():
print("在函数被调用之前,产生了一些事件。")
func()
print("在函数被调用之后,产生了一些事件。")
return wrapper
@my_decorator
def say_hello():
print("你好!")
say_hello()
在这个例子中,my_decorator是一个装璜器,它承受一个函数作为参数,并返回一个新的函数 wrapper。这个新的函数在调用原函数之前和之后都会执行一些额定的代码。而后,咱们应用@my_decorator 来装璜 say_hello 函数。最初,当咱们调用 say_hello 函数时,它会先执行装璜器增加的代码,而后再执行本来的 say_hello 函数代码。
八、什么是多过程?
多过程是一种并发执行技术,其中程序的不同局部在不同的过程中运行。每个过程都有本人的内存空间和系统资源。过程是操作系统进行资源分配和调度的根本单位,是利用程序运行的载体。
多过程技术的次要长处是它能够充分利用多核 CPU 的计算能力。因为每个过程都有本人的内存空间,所以在一个过程中产生的谬误不会影响其余过程。这使得多过程应用程序更加稳固。
在 Python 中,能够应用 multiprocessing 模块来创立和治理多过程。例如,你能够创立一个 Process 对象,而后调用它的 start() 办法来启动一个新的过程。能够应用 Queue 或Pipe等工具进行过程间的通信。
须要留神的是,因为 Python 的全局解释器锁(GIL)的存在,多线程在 Python 中通常无奈无效利用多核 CPU。因而,对于计算密集型工作,应用多过程通常比应用多线程更无效。
九、什么是多线程
多线程是一种并发执行的技术,它容许单个程序中的不同局部同时执行。这些不同局部被称为线程,所有线程都在同一过程中运行,共享雷同的内存空间和系统资源。
与多过程相比,多线程有几个长处:
- 线程的启动和完结的开销相比过程要小得多,因为所有线程都在同一过程中,无需进行过程上下文的切换。
- 线程之间的通信更加简略,因为它们共享内存空间,能够间接拜访雷同的数据。然而,这也须要一些同步机制(如互斥锁、信号量等)来避免多个线程同时批改同一份数据,导致数据不统一。
在 Python 中,能够应用 threading 模块来创立和治理线程。例如,你能够创立一个 Thread 对象,而后调用它的 start() 办法来启动一个新的线程。
十、请介绍下深拷贝与浅拷贝的区别
在 Python 中,深拷贝和浅拷贝是两种不同的复制形式,次要区别在于它们解决对象外部的子对象的形式不同。
- 浅拷贝(Shallow Copy):创立一个新的对象,但只复制原对象的援用,不复制外部的子对象。这意味着新对象和原对象会共享外部的子对象。在 Python 中,能够应用 copy.copy() 函数或者应用某些类型的构造函数(如 list(), dict() 等)来创立浅拷贝。
-
深拷贝(Deep Copy):创立一个新的对象,并递归复制原对象的所有元素,包含外部的子对象。这意味着新对象和原对象不会共享任何元素。在 Python 中,能够应用 copy.deepcopy() 函数来创立深拷贝。
import copy # 浅拷贝示例 a = [[1, 2, 3], [4, 5, 6]] b = copy.copy(a) b[0][0] = 100 print(a) # Output: [[100, 2, 3], [4, 5, 6]] # 深拷贝示例 a = [[1, 2, 3], [4, 5, 6]] b = copy.deepcopy(a) b[0][0] = 100 print(a) # Output: [[1, 2, 3], [4, 5, 6]]
在浅拷贝示例中,批改了 b 的元素,但 a 的相应元素也产生了变动,这是因为 a 和b共享外部的子对象。而在深拷贝示例中,批改了 b 的元素,a的元素没有发生变化,这是因为 a 和b不共享任何元素。