乐趣区

关于python:Python面试高频100题610题

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函数承受两个参数 xy,并返回它们的和。而后咱们将这个 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() 办法来启动一个新的过程。能够应用 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] = 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 的相应元素也产生了变动,这是因为 ab共享外部的子对象。而在深拷贝示例中,批改了 b 的元素,a的元素没有发生变化,这是因为 ab不共享任何元素。

退出移动版