Python面试必知100例。收集整理了目前Python岗位常见的面试题,心愿大家通过学习了解相干知识点。上面介绍的是6~10道题。

六、什么是lambda函数?

在Python中,lambda函数也被称为匿名函数,这是因为它们没有正式的函数名。lambda函数是一种简洁的创立小型函数的形式。
lambda函数的根本语法如下:

lambda arguments: expression

这里,arguments是函数的输出,而expression是函数的输入。lambda函数能够承受任意数量的参数,但只能有一个表达式。
例如,咱们能够创立一个lambda函数来计算两个数字的和:

add = lambda x, y: x + yprint(add(5, 3))  # Output: 8

在这个例子中,lambda函数承受两个参数xy,并返回它们的和。而后咱们将这个lambda函数赋值给add,这样咱们就能够像应用其余函数一样应用这个lambda函数了。
只管lambda函数在代码中看起来更简洁,然而它们通常只在须要简略性能的中央应用,例如作为排序函数的关键字参数。对于更简单的性能,通常举荐应用残缺的def语句来定义函数。

七、什么是装璜器?

在Python中,装璜器(Decorator)是一种非凡类型的函数,它容许咱们向曾经存在的对象增加额定的性能。装璜器的常见用处包含插入日志、性能测试、事务处理、缓存、权限校验等场景。装璜器是批改已有对象的一种轻便、弱小且可保护的形式。
装璜器的根本语法如下:

@decoratordef function():    pass

这里,@decorator是装璜器,function()是要被装璜的函数。Python会先执行装璜器来装璜函数,而后再执行这个函数。
以下是一个简略的装璜器示例:

def my_decorator(func):    def wrapper():        print("在函数被调用之前,产生了一些事件。")        func()        print("在函数被调用之后,产生了一些事件。")    return wrapper@my_decoratordef say_hello():    print("你好!")say_hello()

在这个例子中,my_decorator是一个装璜器,它承受一个函数作为参数,并返回一个新的函数wrapper。这个新的函数在调用原函数之前和之后都会执行一些额定的代码。而后,咱们应用@my_decorator来装璜say_hello函数。最初,当咱们调用say_hello函数时,它会先执行装璜器增加的代码,而后再执行本来的say_hello函数代码。

八、什么是多过程?

多过程是一种并发执行技术,其中程序的不同局部在不同的过程中运行。每个过程都有本人的内存空间和系统资源。过程是操作系统进行资源分配和调度的根本单位,是利用程序运行的载体。
多过程技术的次要长处是它能够充分利用多核CPU的计算能力。因为每个过程都有本人的内存空间,所以在一个过程中产生的谬误不会影响其余过程。这使得多过程应用程序更加稳固。
在Python中,能够应用multiprocessing模块来创立和治理多过程。例如,你能够创立一个Process对象,而后调用它的start()办法来启动一个新的过程。能够应用QueuePipe等工具进行过程间的通信。
须要留神的是,因为Python的全局解释器锁(GIL)的存在,多线程在Python中通常无奈无效利用多核CPU。因而,对于计算密集型工作,应用多过程通常比应用多线程更无效。

九、什么是多线程

多线程是一种并发执行的技术,它容许单个程序中的不同局部同时执行。这些不同局部被称为线程,所有线程都在同一过程中运行,共享雷同的内存空间和系统资源。
与多过程相比,多线程有几个长处:

  1. 线程的启动和完结的开销相比过程要小得多,因为所有线程都在同一过程中,无需进行过程上下文的切换。
  2. 线程之间的通信更加简略,因为它们共享内存空间,能够间接拜访雷同的数据。然而,这也须要一些同步机制(如互斥锁、信号量等)来避免多个线程同时批改同一份数据,导致数据不统一。

在Python中,能够应用threading模块来创立和治理线程。例如,你能够创立一个Thread对象,而后调用它的start()办法来启动一个新的线程。

十、请介绍下深拷贝与浅拷贝的区别

在Python中,深拷贝和浅拷贝是两种不同的复制形式,次要区别在于它们解决对象外部的子对象的形式不同。

  1. 浅拷贝(Shallow Copy):创立一个新的对象,但只复制原对象的援用,不复制外部的子对象。这意味着新对象和原对象会共享外部的子对象。在Python中,能够应用copy.copy()函数或者应用某些类型的构造函数(如list(), dict()等)来创立浅拷贝。
  2. 深拷贝(Deep Copy):创立一个新的对象,并递归复制原对象的所有元素,包含外部的子对象。这意味着新对象和原对象不会共享任何元素。在Python中,能够应用copy.deepcopy()函数来创立深拷贝。

    import copy# 浅拷贝示例a = [[1, 2, 3], [4, 5, 6]]b = copy.copy(a)b[0][0] = 100print(a)  # Output: [[100, 2, 3], [4, 5, 6]]# 深拷贝示例a = [[1, 2, 3], [4, 5, 6]]b = copy.deepcopy(a)b[0][0] = 100print(a)  # Output: [[1, 2, 3], [4, 5, 6]]

    在浅拷贝示例中,批改了b的元素,但a的相应元素也产生了变动,这是因为ab共享外部的子对象。而在深拷贝示例中,批改了b的元素,a的元素没有发生变化,这是因为ab不共享任何元素。